Adressvalidierung mit Adobe Commerce


Author Photo
Oleg Blinnikov
Senior Developer at comwrap

Customer Address validation in Adobe Commerce Cloud

Die Adressvalidierung ist ein wesentlicher Schritt in der Kundenmanagement-Verarbeitung. Adobe Commerce bietet standardmäßig eine Reihe von Validierungsregeln. Jedes Unternehmen hat jedoch seine eigenen Verarbeitungsregeln, die von vielen Faktoren abhängen können. Dazu können der Standort des Kunden/des Unternehmens, ERP-Einschränkungen, Regeln des Versandanbieters oder andere Faktoren gehören. Schauen wir uns also an, wie wir neue Regeln zum Standard-Workflow von Adobe Commerce hinzufügen können.

Wir können Magento einfach mit benutzerdefinierten Validatoren erweitern. Ohne die Notwendigkeit, Kernfunktionen zu überschreiben, Plugins, Beobachter usw. zu erstellen.

Der wichtigste Erweiterungspunkt ist diese Klasse:

Magento\Customer\Model\Address\CompositeValidator

Diese Klasse sammelt alle in di.xml definierten Validatoren. Die Methode validate(AbstractAddress $address) prüft dann Adressinstanzen anhand dieser Validatoren. Wenn eine Prüfung fehlschlägt, gibt die Methode ein Array von Fehlern zurück.

Um einen benutzerdefinierten Prüfer hinzuzufügen, müssen wir einige Schritte im benutzerdefinierten Modul durchführen:


Step 1: Create module registration.php

<?php
declare(strict_types=1);

use Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Comwrap_AddressValidation', __DIR__);


Step 2: Create module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Comwrap_AddressValidation">
        <sequence>
            <module name="Magento_Customer"/>
        </sequence>
    </module>
</config>


Step 3: Create composer.json

{
  "name": "comwrap/address-validation",
  "version": "1.0.0",
  "description": "Module implements bunch of requirements on address validation",
  "type": "magento2-module",
  "require": {
      "magento/framework": "*",
      "magento/module-customer": "*"
  },
  "license": [
    "Proprietary"
  ],
  "autoload": {
    "files": [
      "registration.php"
    ],
    "psr-4": {
      "Comwrap\\AddressValidation\\": ""
    }
  }
}


Step 4: Create etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Customer\Model\Address\CompositeValidator">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="encoding" xsi:type="object">Comwrap\AddressValidation\Model\Address\Validator\Encoding</item>
            </argument>
        </arguments>
    </type>
</config>


Step 5: Adding custom validator class

Erstellen Sie die Klasse Comwrap\AddressValidation\Model\Address\Validator\Encoding.php. Die Klasse muss die Schnittstelle \Magento\Customer\Model\Address\ValidatorInterface implementieren und die Methode validate implementieren.

Hier ist ein Beispiel für die Validierungscode:

<?php
declare(strict_types=1);

namespace Comwrap\AddressValidation\Model\Address\Validator;

use Magento\Customer\Model\Address\AbstractAddress;
use Magento\Customer\Model\Address\ValidatorInterface;

class Encoding implements ValidatorInterface
{
    /**
     * Error Message
     */
    public const ERROR_MESSAGE = 'Sorry, please use "/standard/" Western European characters only. Field: %fieldName';

    /**
     * @inheritdoc
     */
    public function validate(AbstractAddress $address): array
    {
        $errors = [];
        foreach ($address->getData() as $key => $value) {
            if ($value && is_string($value) && !$this->isValid($value)) {
                $errors[] = __(self::ERROR_MESSAGE, ['fieldName' => $key]);
            }
        }

        return $errors;
    }

    /**
     *
     * Basically, this validator tries to convert a string to ISO-8859-15 using iconv()
     * If iconv() fails, we assume that the string includes characters that do not fit our encoding
     *
     * @param string $value
     * @return bool
     */
    public function isValid(string $value): bool
    {
        // convert the string, if iconv fails the string was not proper
        $convertedString = @iconv('UTF-8', 'ISO-8859-15', $value);

        return (bool)$convertedString;
    }
}

Installieren Sie nun das neue Modul wie folgt:

php bin/magento module:enable Comwrap_AddressValidation
php bin/magento setup:upgrade
php bin/magento cache:flush

Wie Sie sehen, können Sie auf diese Weise jede beliebige benutzerdefinierte Validierungsregel hinzufügen. Dazu gehören einfache Validierungen oder einige komplexere Validierungen gegen APIs.


Photo by Erol Ahmed on Unsplash

Weitere Artikel

  • 2023-03-27
    Comwrap Reply ist Adobe 2023 Digital Experience Emerging Partner of the Year
    Author Photo
    Martin Altmann
    Adobe Practise Lead
    Comwrap Reply wurde mit dem prestigeträchtigen Adobe 2023 Digital Experience Emerging Partner of the Year - Central Europe ausgezeichnet. Mit dieser Auszeichnung werden Unternehmen geehrt, die führende Beiträge zum Geschäft von Adobe geleistet und den Kundenerfolg maßgeblich beeinflusst haben.
  • 2022-05-31
    Reply ist Adobe Solution Partner PLATINUM
    Author Photo
    Martin Altmann
    Adobe Practise Lead
    Adobe zeichnet Reply als Adobe Solution Partner Platinum aus
  • 2022-05-10
    Advanced Routing mit Fastly CDN
    Author Photo
    Alexandr Tihanov
    Senior Developer at comwrap
    Fastly ist ein auf Varnish basierender Dienst, der in Adobe Commerce Cloud (Magento) für die Bereitstellung von Inhalten, Sicherheit und Bildoptimierung verwendet wird. In diesem Artikel beschreibe ich einige der erweiterten Routing-Funktionen für Entwickler.