Validação de campo customizado em system.xml

9

Estou desenvolvendo o plugin magento2 (sou um pouco novo no magento2) e tive um problema com a validação do campo em system.xml. Estou pesquisando há muito tempo e não encontrei a resposta. Adicionei um novo campo, mas preciso validar esse campo usando a regex. Vi que existe uma validação padrão, mas preciso de uma personalizada. Existe alguma maneira de adicionar uma nova regra de validação ao validador?

W. Gorczyca
fonte
11
que tipo de validação você precisa colocar nisso?
Dhiren Vasoya 19/10/19

Respostas:

4

Basicamente, você precisa registrar seu método de validação personalizado e usá-lo para o seu campo no system.xmlarquivo.

Defina seu método de validação:

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 use-o para o seu campo em system.xml:

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

Procure por "validator.addMethod" no código principal do Magento 2; existem vários exemplos mostrando casos de uso mais complexos.

Wojtek Naruniec
fonte
Eu tento usar este caminho, mas não funciona magento.stackexchange.com/questions/262645/...
Chirag Patel
9

Como o @Wojtek Naruniec escreve, você deve criar seu próprio método de validação personalizado em um arquivo javascript e usá-lo no campo de configuração do módulo no arquivo system.xml .

Suponha seu campo como:

<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 você gostaria de verificar o comprimento do campo (exatamente 6 caracteres).

Crie seu arquivo javascript,

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

por exemplo:

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

carregue o arquivo javascript na página de configuração do administrador para gerar o arquivo

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>

Agora você pode usar seu validador adicionando uma <validate>tag à <field>tag do seu arquivo 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
fonte
11
Essa deve ser a resposta aceita. Muito mais completo.
Ethan Yehuda