Convalida del campo personalizzato in system.xml


9

Sto sviluppando il plugin magento2 (sono un po 'nuovo in magento2) e ho riscontrato un problema con la convalida del campo in system.xml. Ho cercato a lungo e non ho trovato la risposta. Ho aggiunto un nuovo campo ma devo convalidare questo campo usando regex. Ho visto che esiste una convalida predefinita ma ne ho bisogno una personalizzata, esiste un modo per aggiungere una nuova regola di convalida al validatore?


1
che tipo di convalida devi inserire?
Dhiren Vasoya,

Risposte:


4

Fondamentalmente, è necessario registrare il metodo di convalida personalizzato e quindi utilizzarlo per il campo nel system.xmlfile.

Definisci il tuo metodo di validazione:

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.'
);

E usalo per il tuo campo in system.xml:

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

Cerca "validator.addMethod" nel codice di base di Magento 2, ci sono un sacco di esempi che mostrano casi d'uso più complessi.


Provo ad usare in questo modo ma non funziona magento.stackexchange.com/questions/262645/…
Chirag Patel

9

Come scrive @Wojtek Naruniec, è necessario creare il proprio metodo di convalida personalizzato in un file javascript e utilizzarlo nel campo di configurazione del modulo nel file system.xml .

Supponiamo che il tuo campo sia:

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

e desideri verificare la lunghezza del campo (esattamente 6 caratteri).

Crea il tuo file javascript,

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

per esempio:

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'));
    }
);

quindi caricare il file javascript nella pagina di configurazione dell'amministratore in modo da generare il file

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>

Ora puoi usare il tuo validatore aggiungendo <validate>tag nel <field>tag del tuo file 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>

1
Questa dovrebbe essere la risposta accettata. Molto più approfondito.
Ethan Yehuda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.