Magento 2 Как добавить пользовательские правила проверки и применить их? - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь изменить некоторые правила проверки для ввода State в адресе доставки.Я хочу добавить сообщение об ошибке, если пользователь выбирает «Техас».

Я создал миксин для Magento_Ui/js/lib/validation/rules в requirejs-config.js

Я могу добавить новое правило под названием «customTexasValidationRule» всборник правил.Однако я не знаю, как применить это правило к выбранным входам.

Я вижу, что могу объявить правила в шаблоне выбора на vendor/magento/module-ui/view/frontend/web/templates/form/element/select.html, но я не хочу создавать новый файл шаблонадля такой маленькой задачи.

Есть ли какой-нибудь быстрый и простой способ добавить такую ​​маленькую пользовательскую проверку в Magento 2?

1 Ответ

0 голосов
/ 03 октября 2018

Я нашел способ сделать это:

Я добавил миксин для Magento_Ui/js/lib/validation/validator:

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, так как у меня есть модуль для изменения процесса оформления заказа, поэтому моя структура не совпадает со стандартной компоновкой magento 2.

Большое благодаряhttps://magento.stackexchange.com/questions/209042/add-rule-to-rules-js-magento2/213630#213630, чтобы вести меня в правильном направлении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...