E-Mail validieren

Hallo, ich hab hier meine erste Kollision mit Code-Umstellungen von Oxid6, die ich leider nicht so einfach auflösen kann.

Ich versuche eine vom User eingegebene E-Mailadresse zu validieren, allerdings steht der Aufruf oxRegistry::getUtils()->isValidEmail($email) nicht mehr zur Verfügung.

Wenn ich mir vergleichbare Stellen im Contact Controller ansehe, wird dort nur $form->isValid() aufgerufen. $form wird über den neuen DI-Container geholt, wobei ich nicht weiß, wo das dann definiert wird.

Wo kann ich mir anschauen, wie die Validierung nun funktioniert? Eventuell habt ihr ein Ersatz-Codeschnipsel, das ich verwenden kann? Über einen Hinweis wäre ich sehr dankbar.

Edit: Ahja, hab hier Oxid CE6.1.6 im Einsatz

Das ist mit dem DI echt maximal kompliziert geworden. Die Dateien liegen in internal/Domain/Contact. Die eigentliche Validierung (isValidEmail) ist dann in Core/MailValidator.php, allerdings steht da drin: “deprecated on 6.5.1 at 2020-02-20. Use OxidEsales\EshopCommunity\Internal\Domain\Email\EmailValidationService instead.”

Hey @bYemma :vulcan_salute:

um den Service nutzen zu können musst ihn aus dem DI Container holen:

use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Domain\Email\EmailValidatorServiceBridgeInterface;

ContainerFactory::getInstance()
    ->getContainer()
    ->get(EmailValidatorServiceBridgeInterface::class)
    ->isEmailValid($email);

Der Code der da aufgerufen wird liegt hier:

Ich sehe gerade, dass in dem EmailValidatorServiceBridgeInterface die Methode fehlt, ich mach noch ein Pull Request dazu auf. Solltest du statische code analyse verwenden (PHPStan, Psalm, …) müsstest dir dann temporär eine Ausnahme aufnehmen :wink:
Auch die deprecation notice ist falsch, ist im PR gefixt: https://github.com/OXID-eSales/oxideshop_ce/pull/804

Hoffe ich konnte helfen,
Grüße
Flo

1 Like

Hallo ihr zwei, damit habt ihr mir gut weitergeholfen. Danke!

1 Like