Magento2 在下单前添加自定义校验

5.12K 浏览翻译

Magento2 在下单前添加自定义校验

https://devdocs.magento.com/guides/v2.3/howdoi/checkout/checkout_order.html

这篇文章讲述了,在结账页面中,如何添加订单提交前被执行的自定义校验器。也就是说,在购买者点击 ‘Place Order’ 之后,执行这个校验。但本文不包括如何编写校验器的逻辑。

在提交订单之前添加自定义校验,你必须按照以下步骤:
  1. 创建一个校验器;
  2. 添加校验到校验集合(validator pool)中;
  3. 在 Checkout layout 中声明这个校验。


第一步:创建校验器

为了兼容性,可升级性和易维护性,不要编辑 Magento 默认核心代码,在单独的模块中添加你的自定义内容。为了让你的自定义内容正确地应用,你的自定义模块应该依赖于 Magento_Checkout 模块。别用 Ui 作为你的自定义模块的名字,因为当指定路径时需要的这种 %自定义名称%_Ui 符号可以会因为问题。

在你的自定义模块目录中,创建一个执行校验的 a.js 文件。他应该放在<你的模块目录>/view/frontend/web/js/model 目录下。

下面是校验器 js 文件的一个示例。它必须执行 validate() 方法。
define(
    [],
    function () {
        'use strict';
        return {
            /**
             * Validate something
             *
             * @returns {boolean}
             */
            validate: function() {
                //Put your validation logic here
                return true;
            }
        }
    });


第二步:添加校验器到校验器的集合

你自定义的校验器必须被添加到 ‘可选的校验器’ 的集合中。为了做到这个,用以下内容在 <你的模块的文件夹>/view/frontend/web/js/view 目录下新建一个 <你的校验>.js 文件:
define(
    [
        'uiComponent',
        'Magento_Checkout/js/model/payment/additional-validators',
        '/js/model/your-validator'
    ],
    function (Component, additionalValidators, yourValidator) {
        'use strict';
        additionalValidators.registerValidator(yourValidator);
        return Component.extend({});
    });


第三步:在 checkout  layout 中声明这个校验

在你自定义模块的目录下,新建一个 /view/frontend/layout/checkout_index_index.xml 文件

在这个文件中,添加以下内容:

    
    
        
            
                
                    
                        
                            
                                
                                    
                                        
                                            
                                                
                                                    
                                                        
                                                        
                                                            %your_module_dir%/js/view/%your-validation%
                                                        
                                                        
                                                    
                                                
                                            
                                        
                                    
                                
                            
                        
                    
                
            
        
    
    

0