Hallo!
Mir ist grad unklar, wie ich das am Besten lösen kann. Ich habe ein Feld “Code”, das der Kunde bei der Registrierung hinterlegen kann.
Abspeichern kann ich es in einem eigenen RegisterService. Aber wenn ich dort eine Exception werfe, kommt nur die gewohnte Fehlerseite, ich würde aber gerne das Registrierungsformular (mit Daten) noch einmal anzeigen.
Versuch eins mit subscribe Event Enlight_Controller_Action_PreDispatch_Frontend_Register:
public function onPreFrontendRegister(Enlight_Event_EventArgs $args)
{
$action = $args->getRequest()->getActionName();
if ($action!='saveRegister') return;
if (!$args->get('request')->isPost()) return;
$controller = $args->get('subject');
$data=$args->get('request')->getPost();
$view = $controller->View();
$code=trim(@$data['register']['meinfeld']['code']);
$error=$this->checkCode($code);
if ($error!="OK")
{
$view->assign('errors', array('code'=>$error));
$view->assign($data);
$controller->forward('index');
}
}
Hier sehe ich weder Fehlermeldung, noch die bereits eingegeben Daten, die Seite wird bei einem Fehler leer aufgerufen. Kann ich das irgendwie korrigieren?
Versuch 2 Event Shopware_Form_Builder:
public function onFormBuilder(Enlight_Event_EventArgs $arguments)
{
$reference = $arguments->getReference();
$builder = $arguments->getBuilder();
if ($reference !== \Shopware\Bundle\AccountBundle\Form\Account\AttributeFormType::class
) {
return;
}
$builder->add('code', Symfony\Component\Form\Extension\Core\Type\TextType::class, [
'constraints' => [
new Shopware\MyPlugin\Components\CodeValidator()
]
]);
}
Aber da weiß ich nicht, welcher FormType richtig ist, und welches Feld ich adden soll. Das DB-Feld ist in s_user_attributes.
Danke für Hinweise!