Validación de campo personalizada en system.xml

9

Estoy desarrollando el complemento magento2 (soy un poco nuevo en magento2), y me encontré con un problema con la validación del campo en system.xml. Estuve buscando durante mucho tiempo y no encontré la respuesta. Agregué un nuevo campo pero necesito validar este campo usando la expresión regular. Vi que hay una validación predeterminada, pero necesito una personalizada, ¿hay alguna forma de agregar una nueva regla de validación al validador?

W. Gorczyca
fuente
1
¿Qué tipo de validación necesitas poner en esto?
Dhiren Vasoya

Respuestas:

4

Básicamente, debe registrar su método de validación personalizado y luego usarlo para su campo en el system.xmlarchivo.

Defina su método de validación:

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

Y úsalo para tu campo en system.xml:

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

Busque "validator.addMethod" en el código principal de Magento 2, hay un montón de ejemplos que muestran casos de uso más complejos.

Wojtek Naruniec
fuente
Intento usarlo de esta manera pero no funciona magento.stackexchange.com/questions/262645/…
Chirag Patel
9

Como escribe @Wojtek Naruniec, debe crear su propio método de validación personalizado en un archivo javascript y usarlo en el campo de configuración de su módulo en el archivo system.xml .

Suponga que su campo es:

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

y desea verificar la longitud del campo (exactamente 6 caracteres).

Crea tu archivo javascript,

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

por ejemplo:

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

luego cargue el archivo javascript en la página de configuración del administrador para que tenga que generar el archivo

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>

Ahora puede usar su validador agregando <validate>etiquetas a la <field>etiqueta de su archivo 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
fuente
1
Esta debería ser la respuesta aceptada. Mucho más minucioso.
Ethan Yehuda