Проверка формы компонента пользовательского интерфейса: Метод шаблона


У меня есть форма администратора ui_component, в которой есть список полей, и я добавляю к ним проверку. Один из них я хотел бы использовать по индивидуальному шаблону. Форма в целом работает, просто эта проверка "шаблона" вызывает проблему.

Итак, вот соответствующая настройка <field> из моего файла module_controller_form.xml:

    <field name="my_custom_filed">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">My Custom Filed</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="source" xsi:type="string">model_name</item>
                <item name="dataScope" xsi:type="string">my_custom_field</item>
                <item name="sortOrder" xsi:type="number">1</item>
                <item name="validation" xsi:type="array">
                    <item name="required-entry" xsi:type="boolean">true</item>
                    <item name="no-whitespace" xsi:type="boolean">true</item>
                    <item name="validate-pattern" xsi:type="string">/^[a-z][a-z0-9_.-]$/i</item>
                </item>
            </item>
        </argument>
    </field>

Вышеизложенное в целом работает. Я получаю ошибку javascript о строке /^[a-z][a-z0-9_.-]$/i, не имеющей метода test(). Согласно validation.js Я вижу содержимое для метода проверки pattern следующим образом:

    "pattern": [
        function (value, element, param) {
            return this.optional(element) || param.test(value);
        },
        'Invalid format.'
    ],

Когда этот код выполняется, он выполняется со следующим вызовом:

validations['pattern']('Test String', [element], "/^[a-z][a-z0-9_.-]$/i")

К сожалению, он передает значение узла <item> в виде строки, вместо того, чтобы переводить его в объект RegExp.

Есть ли способ указать шаблон проверки из *_form.xml и правильно преобразовать значение в объект регулярного выражения? Я действительно не видел, чтобы какие-либо основные модули использовали эту проверку в своем XML объявления, но, похоже, это все равно должно работать.

ОБНОВЛЕНИЕ

Я все еще изучаю это, пытаясь найти, где XML-форма для узла validation преобразуется в привязки javascript. Кто-нибудь знает, где я могу начать поиск этого?

Author: Brett, 2017-05-04

1 answers

Похоже, что это основная ошибка в самом Magento. Строка для регулярного выражения не преобразуется должным образом с помощью new RegExp() или, если вы предоставляете собственное регулярное выражение (например, /[a-z][a-z0-9]+/i), оно не интерпретируется как таковое.

Я отправил проблему через GitHub и подтвердил, что она существует в Magento CE 2.1.7, а также в EE. Надеюсь, они исправят ошибку в следующем выпуске.

Https://github.com/magento/magento2/issues/9919

РЕДАКТИРОВАТЬ: Как в Magento 2.2.2 это было исправлено.

 1
Author: Brett, 2018-01-04 20:30:32