Magentoフォームの検証を理解する
公開: 2021-05-31目次
今日の記事では、Magento 2でのフォーム検証と、フォーム検証をMagentoストアに最適に実装する方法について学習します。
フォーム検証モジュール
Magentoには、jQuery検証に基づいて拡張するフォーム検証用の3つの主要なモジュールがあります。
-  
/lib/web/jquery/jquery.validate.js:基本のjQuery検証 /lib/web/mage/validation.js:基本のjQuery検証と、カスタム検証ルールを追加するために使用できる$.validator.addMethodなどの追加関数が含まれています/lib/web/mage/validation/validation.jsmage/validation.jsを含み、バリデーターにさらにいくつかのルールを追加します
フォーム検証ルール
デフォルトでは、Magentoで使用可能なルールは/validation/rules.jsに保存されます。 ただし、使用できるルールはこれだけではありません。 フォーム検証のメインモジュールはjQueryに基づいているため、jQueryの組み込みの検証メソッドを使用できます。
ハウツー
カスタムルールを作成する
上記のように、 mage/validationモジュールのJavaScriptミックスインを作成し、次のように$.validator.addMethodを呼び出すことで、カスタムルールを作成できます。 
 $ .validator.addMethod(
  'ルール名'、
  関数(値、要素){
    //検証ルールのチェック後にtrueまたはfalseを返します
  }、
  $ .mage .__('検証が失敗した場合に表示するエラーメッセージ')
)。次のコードは、入力フィールドに5語しかないかどうかを確認するために、ミックスインに検証ルールを追加します。
ベンダー/モジュール/ビュー/フロントエンド/requirejs-config.js
 var config = {
  構成:{
    ミックスイン:{
      'メイジ/検証':{
        'Vendor_Module / js / validation-mixin':true
      }
    }
  }
}ベンダー/モジュール/ビュー/フロントエンド/ウェブ/js/validation-mixin.js
 define(['jquery']、function($){
  '厳密に使用';
  function()を返す{
    $ .validator.addMethod(
      'validate-five-words'、
      関数(値、要素){
        戻り値.split('').length == 5;
      }、
      $ .mage .__('正確に5つの単語を入力してください')
    )。
  }
});既存の検証メッセージを変更する
メッセージオブジェクトは、検証ルールを変更せずに既存の検証メッセージのみを変更する必要がある場合に役立つことがあります。
たとえば、次のコードでは次のようになります。
 $('#form-to-validate')。mage('validation'、{
    メッセージ:{
        '入力名':{
            'validation-rule-1':'検証メッセージ1'、
            'validation-rule-2':'検証メッセージ2'、
        }、
    }
}); input-nameはオブジェクトのキーであり、その値は検証ルールのリストです。 これらの検証ルールには、値として検証メッセージがあり、好みに合わせて自由に変更できます。
カスタムフォーム検証を作成する
mage/validationライブラリを使用すると、サーバーに送信する前にカスタムフォーム検証を作成できます。
ステップ1:検証を開始する
フォームの検証を開始するために使用できる方法は2つあります。
 data-mage-init属性の使用
 <form data-mage-init ='{"validation":{}}'>
    ..。
</ form> text/x-magento-initスクリプトタイプタグの使用
 <script type = "text / x-magento-init">
    {{
        "#my-form":{
            「検証」:{}
        }
    }
</ script>ステップ2:フォームフィールドの検証ルールを定義する
Magentoでフォーム検証ルールを定義する方法はいくつかあります
属性として
<input ... required = "true" />
引数付きの属性として
<input ... required = "true" minlength = "15" />
クラス名として
<input ... class = "input-text required-entry" />
引数付きのクラス名として
<input ... class = "input-text required-entry" minlength = "15" />
 data-validate属性として: 
 <input ... data-validate ='{"required":true}' /> 引数付きのdata-validate属性として
 <input ... data-validate ='{"required":true、 "minlength":10}' /> data-mage-init使用
 <form ... data-mage-init ='{"validation":{"rules":{"field-1":{"required":true}}}}'>
    ..。
</ form> 引数付きdata-mage-init使用
 <form ... data-mage-init ='{"validation":{"rules":{"field-1":{"required":true、 "minlength":20}}}}'>
    ..。
</ form>例
ここでは、さまざまな検証方法を使用して、各フィールドの検証フォームとともにフォームフィールドを作成してみます。

 <form class = "form" method = "post" data-mage-init ='{"validation":{"rules":{"field-4":{"required":true}}}}'>
    <fieldset class = "fieldset">
        <div class="フィールド名が必要">
            <label class = "label" for = "field-1"> <span>フィールド1(データ検証を使用)</ span> </ label>
            <div class = "control">
                <input name = "field-1" title = "Field 1" value = "" class = "input-text" type = "text" data-validate ='{"required":true、 "url":true}' />
            </ div>
        </ div>
        <div class="フィールド名が必要">
            <label class = "label" for = "field-2"> <span>フィールド2(属性を使用)</ span> </ label>
            <div class = "control">
                <input name = "field-2" title = "Field 2" value = "" class = "input-text" type = "text" required = "true" />
            </ div>
        </ div>
        <div class="フィールド名が必要">
            <label class = "label" for = "field-3"> <span>フィールド3(クラス名を使用)</ span> </ label>
            <div class = "control">
                <input name = "field-3" title = "Field 3" value = "" type = "text" class = "input-text required-entry" />
            </ div>
        </ div>
        <div class="フィールド名が必要">
            <label class = "label" for = "field-4"> <span>フィールド4(data-mage-initを使用)</ span> </ label>
            <div class = "control">
                <input name = "field-4" title = "Field 4" value = "" class = "input-text" type = "text" />
            </ div>
        </ div>
    </ fieldset>
    <div class = "actions-toolbar">
        <div class = "primary">
            <button type = "submit" title = "Submit" class = "action submitprimary">
                <span>送信</span>
            </ button>
        </ div>
    </ div>
</ form>上記のフィールドとフォームの検証を使用すると、結果は次のようになります。

