Registrierung: Zusätzliches Feld mit Validierung und Registrierung abbrechen

Hallo,

 

Ich arbeite an einem Plugin, welches dem Registrierungsformular ein zusätzliches Feld hinzufügt. Dieses soll eine Art Verifizierungscode sein.

Das Feld wird im POST mit gesendet als

$customerVerification = $_POST['register']['personal']['verification']

An welches Event muss ich mich hängen bzw. welche Art von Hook erstellen, damit ich zunächst dieses Feld auf Richtigkeit prüfen kann und die Registrierung abbrechen kann, falls das Feld nicht einen bestimmten Wert hat? Aktuell hänge ich mich an das Event

**Shopware\_Modules\_Admin\_SaveRegister\_Successful**

Das scheint allerdings schon einen Schritt zu spät zu sein…Die Frage wäre auch, was genau dann getan werden muss, damit die Registrierung nicht abgeschlossen wird. Muss ich dafür eine Fehlermeldung in $errors[‘personal’] hinterlegen?

Ja, bei dem Event bist du zu spät dran. Welche Shopware Version setzt du denn ein? Der Registierungsprozess wurde irgendwann, ich glaube mit der 5.2, komplett überarbietet.

Das Plugin soll im neuen 5.2 Plugin-System und für Mind. Version 5.2 lauffähig sein

Ich bin mittlerweile soweit, dass ich es mit einem Replace-Hook auf den Register-Controller das ganze geprüft kriege:

 

public static function getSubscribedEvents()
    {
        return [
            'Shopware_Controllers_Frontend_Register::saveRegisterAction::replace' => 'onReplaceSaveRegister'
        ];
    }

    public function onReplaceSaveRegister(\Enlight_Hook_HookArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_Register $subject */
        $subject = $args->getSubject();
        $data = $subject->Request()->getPost();
        $customerVerification = $data['register']['personal']['verification'];

        if (!empty($customerVerification)) {
            $verification = $this->config->getByNamespace('CompraRegisterExtension', 'verification');
            if ($customerVerification !== $verification) {
                // Error message
                $errors['occurred'] = true;
                $errors['personal'][] = $this->snippetManager->getNamespace('frontend/register/compra_register_extension')
                    ->get('VerificationCodeNotValid', 'Bitte geben Sie einen gültigen Verifizierungscode ein.', true);
                $subject->View()->assign('errors', $errors);
                $subject->View()->assign($data);
                $subject->forward('index', 'register', 'frontend', $subject->Request()->getParams());
            }
        } else {
            $subject->executeParent($args->getMethod(), $args->getArgs());
        }


        $return = $args->getReturn();

        $args->setReturn($return);
    }

 

Mit forward geht er auch wieder zurück auf die Registrierungsseite, allerdings erhalte ich dann nur oben die Fehlermeldung…die Felder des Registrierungsformulars sind geleert und nicht aus den voherigen Eingaben übernommen…