E-Mail Validierung überschreiben

In der aktuellen Version (5.1.3) nutzt Shopware den Egulias-Emailvalidator.

Der ist aber über die Components\Validation\Emailvalidation sehr großzügig eingebunden:

 

    public function isValid($emailAddress)
    {
        /**
         * Creates a new instance of the underlying validator class
         * on each validation request to avoid problems related to
         * state in the validator implementation
         */
        $baseValidator = new BaseEmailValidator();

        return $baseValidator->isValid($emailAddress, false, true);
    }

Ich könnte nun einfach den Aufruf von „isValid()“ entsprechend anpassen (und den zweiten Paramter auf „true“ setzen) und hätte dann eine strengere Validierung. Updatesicher ist das jedoch nicht.

Kann ich die Methode überschreiben und falls ja: wie?

 

Mit

 

        $this->subscribeEvent(
            'Shopware\Components\Validator\EmailValidator::IsValid::replace',
            'isValid'
        );

komme ich jedenfalls nicht ans Ziel.

P.S.: Alternativ wäre es schön, wenn man die Paramter über das Backend steuern könnte!

Da wird sich in 5.1.4 etwas ändern
shopware/UPGRADE.md at 5.1 · shopware/shopware · GitHub

1 Like

Hallo Zusammen,

wie sonic richtig bemerkt hat, haben wir in 5.1.4 die implementierung des Email Validators auf einen einfachen Regex umgestellt.

 

Aber auch schon in den vorherigen Versionen kann der gesamte EmailValidator ausgetauscht werden. 

Dazu könnt ihr ein Plugin anlegen welches den container service  validator.email austauscht. Das nötige event dafür ist  Enlight_Bootstrap_InitResource_validator.email:

class Shopware_Plugins_Frontend_SwagMyMailValidator_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
    public function install()
    {
        $this->subscribeEvent(
            'Enlight_Bootstrap_InitResource_validator.email',
            'onValidatorInit'
        );

        return true;
    }

    public function onValidatorInit(Enlight_Event_EventArgs $args)
    {
        return new MyEmailValidator();        
    }
}

Der EmailValidator der dort erstellt wird muss das  EmailValidatorInterface implementieren, also eine isValid() methode haben:

class MyEmailValidator implements \Shopware\Components\Validator\EmailValidatorInterface
{
    public function isValid($emailAddress)
    {
        // your logic here
        return !strpos($emailAddress, '@') !== false;
    }
}

Im Shopware Core benutzen wir ab 5.1.4 einen regex um die email Adressen zu überpüfen. Weiterhin liefern wir aber auch **\Egulias\EmailValidator\EmailValidator **für eigene   EmailValidatorInterface-Implementierungen mit.

Dort könnt ihr dann auch erweiterte Optionen wie zb. den DNS check aktivieren.

Mehr dazu findet ihr in der Developer Dokumentation unter: Service extensions

Viele Grüße,
Benjamin Cremer 

 

 

 

5 Likes