system.xmlでのカスタムフィールドの検証


9

私はmagento2プラグインを開発しています(私はmagento2の新機能です)、system.xmlのフィールドの検証で問題が発生しました。私は長い間探していましたが、答えが見つかりませんでした。新しいフィールドを追加しましたが、正規表現を使用してこのフィールドを検証する必要があります。デフォルトの検証がいくつかあることを確認しましたが、カスタムの検証が必要です。新しい検証ルールをバリデーターに追加する方法はありますか?


1
これにどのタイプの検証を行う必要がありますか?
Dhiren Vasoya 2016年

回答:


4

基本的に、カスタム検証メソッドを登録し、それをsystem.xmlファイル内のフィールドに使用する必要があります。

検証方法を定義します。

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

そして、あなたのフィールドにそれを使用してくださいsystem.xml

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

Magento 2コアコードで「validator.addMethod」を検索すると、より複雑な使用例を示す例がたくさんあります。


私はこの方法を使用してみたが動作していない magento.stackexchange.com/questions/262645/...
チラグ・パテル

9

@Wojtek Naruniecが書いているように、JavaScriptファイルで独自のカスタム検証メソッドを作成し、system.xmlファイルのモジュール構成フィールドで使用する必要があります。

次のようにフィールドを想定します。

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

また、フィールド長(正確には6文字)を確認したいとします。

JavaScriptファイルを作成します。

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

例えば:

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

次に、javascriptファイルを管理設定ページにロードして、ファイルを生成する必要があります。

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>

これで、バリデーターを使用してsystem.xmlファイルの<validate>タグに<field>タグを追加できます。

<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
これは受け入れられる答えになるはずです。より徹底的に。
イーサンイェフダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.