Magento 2如何添加自定义验证规则并应用它们?

时间:2018-10-03 00:05:50

标签: javascript jquery validation magento2

我正在尝试为送货地址中的“州”输入修改一些验证规则。如果用户选择“德克萨斯州”,我想添加一条错误消息。

我在Magento_Ui/js/lib/validation/rules中为requirejs-config.js创建了一个mixin

我可以在规则集合中添加一个名为“ customTexasValidationRule”的新规则。但是我不知道如何将此规则应用于选择输入。

我看到我可以在vendor/magento/module-ui/view/frontend/web/templates/form/element/select.html的select模板中声明规则,但是我不想为如此小的任务创建新的模板文件。

在Magento 2中是否有任何快速简便的方法来添加如此小的自定义验证?

1 个答案:

答案 0 :(得分:0)

我想出了一种方法来实现这一点:

我为Magento_Ui/js/lib/validation/validator添加了一个mixin:

define([
    'jquery'
], function($) {
    return function(validator) {
        validator.addRule(
            'custom-rule',
            function (value) {
                // Custom rule logics here
                return false;
            $.mage.__('Custom error message')
        );
        return validator;
    }
});

然后我将其添加到etc/frontend/di.xml中,具体取决于您安装的模块,您可能具有不同的LayoutProcessorProvider,或者您可能必须使用Magento\Checkout\Block\Checkout\LayoutProcessor,请参阅我在底部提到的链接有关更多详细信息,在这里,我有一个结帐模块来修改我的结帐流程,称为MyVendor\MyCheckoutModule,所以我有以下内容:

<type name="MyVendor\MyCheckoutModule\Model\Layout\LayoutProcessorProvider">
    <arguments>
        <argument name="processors" xsi:type="array">
            <item name="additional-billing-address-validation" xsi:type="string">MyVendor\MyModule\Block\Checkout\LayoutProcessor\Billing\Addtional\Validation</item>
        </argument>
    </arguments>
</type>

然后我添加了此Validation.php文件

<?php
namespace MyVendor\MyModule\Block\Checkout\LayoutProcessor\Billing\Additional;

use Magento\Checkout\Block\Checkout\LayoutProcessorInterface;

class Validation implements LayoutProcessorInterface
{
    public function process($jsLayout)
    {
        $jsLayout['components']['checkout']['children']['paymentMethod']['children']['billingAddress']
            ['children']['region_id']['validation']['custom-rule'] = 1;

        return $jsLayout;
    }
}

清除缓存和刷新,现在可以使用帐单邮寄地址表单中的我选择的输入进行验证。

请注意,$jsLayout中的结构可能有所不同,因为我有一个模块可以修改结帐流程,因此我的结构与stock magento 2布局不一样。

非常感谢https://magento.stackexchange.com/questions/209042/add-rule-to-rules-js-magento2/213630#213630带领我朝着正确的方向