system.xml中的自定义字段验证


9

我正在开发magento2插件(我对magento2有点陌生),但在验证system.xml中的字段时遇到了问题。我已经搜索了很长时间,没有找到答案。我添加了一个新字段,但是我需要使用正则表达式来验证此字段。我看到有一些默认验证,但我需要自定义验证,有什么办法可以向验证器添加新的验证规则吗?


1
您需要进行哪种类型的验证?
Dhiren Vasoya '16

Answers:


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>

在Magento 2核心代码中搜索“ validator.addMethod”,那里有很多示例,它们显示了更复杂的用例。


我尝试用这种方式,但不工作 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文件,

vendorName / moduleName / view / adminhtml / web / 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文件,因此您必须生成该文件

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>

现在,您可以使用您的验证器将<validate>标记添加到system.xml文件的<field>标记中:

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

1
这应该是公认的答案。更彻底。
伊桑·耶胡达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.