Validasi bidang khusus di system.xml

9

Saya sedang mengembangkan plugin magento2 (saya agak baru di magento2), dan saya mengalami masalah dengan validasi bidang di system.xml. Saya sudah mencari sejak lama dan tidak menemukan jawabannya. Saya menambahkan bidang baru tapi saya perlu memvalidasi bidang ini menggunakan regex. Saya melihat bahwa ada beberapa validasi default, tetapi saya perlu kustom, apakah ada cara untuk menambahkan aturan validasi baru ke validator?

W. Gorczyca
sumber
1
jenis validasi apa yang perlu Anda masukkan ini?
Dhiren Vasoya

Jawaban:

4

Pada dasarnya, Anda perlu mendaftarkan metode validasi khusus Anda dan kemudian menggunakannya untuk bidang Anda dalam system.xmlfile.

Tentukan metode validasi Anda:

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

Dan gunakan untuk bidang Anda di system.xml:

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

Cari "validator.addMethod" dalam kode inti Magento 2, ada banyak contoh di sana yang menunjukkan kasus penggunaan yang lebih kompleks.

Wojtek Naruniec
sumber
Saya mencoba menggunakan cara ini tetapi tidak berfungsi magento.stackexchange.com/questions/262645/…
Chirag Patel
9

Seperti yang ditulis oleh @Wojtek Naruniec, Anda harus membuat metode validasi kustom Anda sendiri dalam file javascript dan menggunakannya dalam bidang konfigurasi modul Anda di file system.xml .

Misalkan bidang Anda sebagai:

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

dan Anda ingin memeriksa panjang bidang (tepatnya 6 karakter).

Buat file javascript Anda,

vendorName / moduleName / view / adminhtml / web / js / validation.js

sebagai contoh:

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

kemudian muat file javascript di halaman konfigurasi admin sehingga Anda harus membuat file

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

Sekarang Anda dapat menggunakan <validate>tag validator Anda menambahkan ke dalam <field>tag file system.xml Anda :

<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>
WaPoNe
sumber
1
Ini harus menjadi jawaban yang diterima. Jauh lebih teliti.
Ethan Yehuda