Проверка пользовательских полей в system.xml

9

Я разрабатываю плагин magento2 (я новичок в magento2), и я столкнулся с проблемой проверки поля в system.xml. Я долго искал и не нашел ответа. Я добавил новое поле, но мне нужно проверить это поле с помощью регулярного выражения. Я видел, что есть некоторая проверка по умолчанию, но мне нужна пользовательская, есть ли способ добавить новое правило проверки в валидатор?

В. Горчица
источник
1
какой тип проверки вы должны поставить на это?
Дирен Васоя

Ответы:

4

По сути, вам нужно зарегистрировать свой собственный метод проверки, а затем использовать его для своего поля в system.xmlфайле.

Определите ваш метод проверки:

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

И используйте это для своей области в system.xml:

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

Ищите «validator.addMethod» в коде ядра Magento 2, там есть множество примеров, показывающих более сложные варианты использования.

Войтек Нарунец
источник
Я пытаюсь использовать этот способ, но не работает magento.stackexchange.com/questions/262645/…
Чираг Патель
9

Как пишет @Wojtek Naruniec, вы должны создать свой собственный метод проверки в файле javascript и использовать его в поле конфигурации вашего модуля в файле system.xml .

Предположим ваше поле как:

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

и вы хотели бы проверить длину поля (ровно 6 символов).

Создайте свой файл JavaScript,

Имя_вендора / MODULENAME / просмотр / adminhtml / веб / JS / validation.js

например:

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

затем загрузите файл javascript на странице конфигурации администратора, чтобы вы сгенерировали файл

Имя_вендора / MODULENAME / просмотр / adminhtml / макет / 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>

Теперь вы можете использовать свой валидатор, добавляя <validate>тег в <field>тег вашего файла 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
источник
1
Это должен быть принятый ответ. Гораздо тщательнее.
Итан Иегуда