Xác thực trường tùy chỉnh trong system.xml


9

Tôi đang phát triển plugin magento2 (Tôi là một người mới trong magento2) và tôi gặp phải một vấn đề với việc xác thực trường trong tệp system.xml. Tôi đã tìm kiếm trong một thời gian dài và không tìm thấy câu trả lời. Tôi đã thêm một trường mới nhưng tôi cần xác thực trường này bằng regex. Tôi thấy rằng có một số xác nhận mặc định nhưng tôi cần một tùy chỉnh, có cách nào để thêm quy tắc xác thực mới vào trình xác nhận không?


1
loại xác nhận nào bạn cần đưa vào này?
Dhiren Vasoya

Câu trả lời:


4

Về cơ bản, bạn cần đăng ký phương thức xác thực tùy chỉnh và sau đó sử dụng nó cho trường của bạn trong system.xmltệp.

Xác định phương thức xác nhận của bạn:

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.'
);

Và sử dụng nó cho lĩnh vực của bạn trong system.xml:

<validate>validate-number validate-zero-or-greater validate-custom</validate>

Tìm kiếm "validator.addMethod" trong mã lõi Magento 2, có một loạt các ví dụ ở đó hiển thị các trường hợp sử dụng phức tạp hơn.


Tôi thử sử dụng cách này nhưng không hoạt động magento.stackexchange.com/questions/262645/Í
Chirag Patel

9

Như @Wojtek Naruniec viết, bạn phải tạo phương thức xác thực tùy chỉnh của riêng bạn trong tệp javascript và sử dụng nó trong trường cấu hình mô-đun của bạn trong tệp system.xml .

Giả sử lĩnh vực của bạn là:

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

và bạn muốn kiểm tra độ dài trường (chính xác là 6 ký tự).

Tạo tệp javascript của bạn,

ellerName / moduleName / view / adminhtml / web / js / verify.js

ví dụ:

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'));
    }
);

sau đó tải tệp javascript trong trang cấu hình quản trị viên để bạn phải tạo tệp

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

Bây giờ bạn có thể sử dụng <validate>thẻ thêm trình xác thực của mình vào <field>thẻ của tệp system.xml của bạn :

<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
Đây phải là câu trả lời được chấp nhận. Kỹ lưỡng hơn nhiều.
Ethan Yehuda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.