Validation de champ personnalisé dans system.xml

9

Je développe le plugin magento2 (je suis un peu nouveau dans magento2) et j'ai rencontré un problème avec la validation du champ dans system.xml. Je cherche depuis longtemps et je n'ai pas trouvé la réponse. J'ai ajouté un nouveau champ mais je dois valider ce champ en utilisant l'expression régulière. J'ai vu qu'il y avait une validation par défaut mais j'en ai besoin d'une personnalisée, est-il possible d'ajouter une nouvelle règle de validation au validateur?

W. Gorczyca
la source
1
quel type de validation vous devez mettre sur cela?
Dhiren Vasoya

Réponses:

4

Fondamentalement, vous devez enregistrer votre méthode de validation personnalisée, puis l'utiliser pour votre champ dans un system.xmlfichier.

Définissez votre méthode de validation:

jQuery.validator.addMethod(
    "validate-custom", 
    function (v) {
        return jQuery.mage.isEmptyNoTrim(v) || /^[1-4]+$/.test(v);
     },
    'Please use digits only (1-4) in this field.'
);

Et utilisez-le pour votre domaine dans system.xml:

<validate>validate-number validate-zero-or-greater validate-custom</validate>

Recherchez "validator.addMethod" dans le code principal de Magento 2, il y a un tas d'exemples montrant des cas d'utilisation plus complexes.

Wojtek Naruniec
la source
J'essaie d'utiliser cette méthode mais ne fonctionne pas magento.stackexchange.com/questions/262645/…
Chirag Patel
9

Comme l'écrit @Wojtek Naruniec, vous devez créer votre propre méthode de validation personnalisée dans un fichier javascript et l'utiliser dans le champ de configuration de votre module dans le fichier system.xml .

Supposons que votre domaine soit:

<field id="color" translate="label comment" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
    <label>Color</label>
    <comment>Exadecimal value, without #: ex. FFFFFF</comment>
</field>

et vous souhaitez vérifier la longueur du champ (exactement 6 caractères).

Créez votre fichier javascript,

vendorName / moduleName / view / adminhtml / web / js / validation.js

par exemple:

require([
    'jquery',
    'mage/translate',
    'jquery/validate'],
    function($){
        $.validator.addMethod(
            'validate-exadecimal-color-length', function (v) {
                return (v.length == 6);
            }, $.mage.__('Field must have length of 6'));
    }
);

puis chargez le fichier javascript dans la page de configuration de l'administrateur, vous devez donc générer le fichier

vendorName / moduleName / view / adminhtml / layout / adminhtml_system_config_edit.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <link src="vendorName_moduleName::js/validation.js"/>
    </head>
</page>

Vous pouvez maintenant utiliser votre validateur en ajoutant une <validate>balise dans la <field>balise de votre fichier system.xml :

<field id="color" translate="label comment" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
    <label>Color</label>
    <validate>validate-exadecimal-color-length</validate>
    <comment>Exadecimal value, without #: ex. FFFFFF</comment>
</field>
WaPoNe
la source
1
Ce devrait être la réponse acceptée. Beaucoup plus approfondi.
Ethan Yehuda