EC-CUBE3ではFormBuilderで作成したフォームに対して簡単にバリデーション(制限)をかけることができます。
今回の記事では開発によく使用するバリデーションをご紹介いたします。
バリデーションにはFormBuilderのconstraintsオプションを設定します。
空欄を禁止する(Assert\NotBlank)
もっともよく使用する、必須項目のためのバリデーションです。
$builder ->add('name', 'text', array( 'label' => '名称', 'required' => true, 'constraints' => array( new Assert\NotBlank(), ), ))
数字のみ(Assert\Regex or Assert\Type)
数量などのフォームで使用します。正規表現使用。
$builder ->add('quantity', 'integer', array( 'constraints' => array( new Assert\Regex(array('pattern' => '/^\d+$/')), ), )) ;
Typeを使って整数値に制限します。
$builder ->add('number', 'integer', array( 'label' => '数値', 'required' => false, 'constraints' => array( new Assert\Type(array( 'type' => 'integer', )), ), ))
10以上の数値(Assert\GreaterThanOrEqual)
上の数値バリデーションと組み合わせることが多いです。
$builder ->add('quantity', 'integer', array( 'constraints' => array( new Assert\NotBlank(), new Assert\GreaterThanOrEqual(array( 'value' => 10, )), new Assert\Regex(array('pattern' => '/^\d+$/')), ), )) ;
1以上10以下の数値(Assert\GreaterThanOrEqual + Assert\LessThanOrEqual)
$builder ->add('quantity', 'integer', array( 'constraints' => array( new Assert\NotBlank(), new Assert\GreaterThanOrEqual(array( 'value' => 1, )), new Assert\LessThanOrEqual(array( 'value' => 10, )), new Assert\Regex(array('pattern' => '/^\d+$/')), ), )) ;
20文字以上100文字以下(文字数制限 Assert\Length)
テキスト系のフォームで活躍する文字数制限のバリデーションです。
$builder ->add('name', 'text', array( 'label' => '名称', 'required' => true, 'constraints' => array( new Assert\NotBlank(), new Assert\Length( array( 'max' => 100, 'min' => 20, ) ), ), ))
正規表現(Assert\Regex)
ひらがなやカタカナのバリデーションは正規表現を使用します。自由に制限することができます。
名前や会社名のフリガナフォームで大活躍します。
$builder ->add('kana', 'text', array( 'constraints' => array( new Assert\Regex(array('pattern' => "/^[ァ-ヶヲ-゚ー]+$/u", )), ), )) ;
いかがでしょうか。これらのバリデーションはform_widgetで出力したフォームでは自動的に適用されます。
フォームが簡単に作れるのはEC-CUBE3の大きなメリットで、このあたりはEC-CUBE2の時代よりも大幅に便利になりましたね。
EC-CUBE3をご利用の方はぜひご活用ください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。