Weryfikacja pola niestandardowego w pliku system.xml

9

Zajmuję się tworzeniem wtyczki magento2 (jestem trochę nowy w magento2) i napotkałem problem ze sprawdzaniem poprawności pola w pliku system.xml. Długo szukałem i nie znalazłem odpowiedzi. Dodałem nowe pole, ale muszę je zweryfikować za pomocą wyrażenia regularnego. Widziałem, że istnieje pewna domyślna walidacja, ale potrzebuję niestandardowej, czy jest jakiś sposób, aby dodać nową regułę walidacji do walidatora?

W. Gorczyca
źródło
1
jaki rodzaj walidacji należy w tym celu zastosować?
Dhiren Vasoya

Odpowiedzi:

4

Zasadniczo musisz zarejestrować niestandardową metodę sprawdzania poprawności, a następnie użyć jej dla pola w system.xmlpliku.

Zdefiniuj metodę walidacji:

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

I użyj go dla swojego pola w system.xml:

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

Wyszukaj „validator.addMethod” w głównym kodzie Magento 2, jest tam wiele przykładów pokazujących bardziej złożone przypadki użycia.

Wojtek Naruniec
źródło
Staram się używać w ten sposób, ale nie działam magento.stackexchange.com/questions/262645/…
Chirag Patel
9

Jak pisze @Wojtek Naruniec, musisz stworzyć własną metodę walidacji w pliku javascript i użyć jej w polu konfiguracji modułu w pliku system.xml .

Załóżmy, że twoje pole jest:

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

i chcesz sprawdzić długość pola (dokładnie 6 znaków).

Utwórz plik javascript,

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

na przykład:

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

następnie załaduj plik javascript na stronie konfiguracji administratora, aby wygenerować plik

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>

Teraz możesz użyć walidatora dodając <validate>znacznik do <field>znacznika pliku 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
źródło
1
To powinna być zaakceptowana odpowiedź. O wiele dokładniejszy.
Ethan Yehuda