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?
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