我正在尝试为送货地址中的“州”输入修改一些验证规则。如果用户选择“德克萨斯州”,我想添加一条错误消息。
我在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中是否有任何快速简便的方法来添加如此小的自定义验证?
答案 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带领我朝着正确的方向