Проверка формы компонента пользовательского интерфейса: Метод шаблона
У меня есть форма администратора 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. Кто-нибудь знает, где я могу начать поиск этого?
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 это было исправлено.