FuelPHPのvalidationのadd_ruleでそれぞれ個別にメッセージを出したい。
/lang/jp/validation.php <?php return array( 'required' => '『:label』は必須です', 'min_length' => '『:label』は:param:1文字以上で入力してください', 'max_length' => '『:label』は:param:1文字以内で入力してください', 'exact_length' => '『:label』は:param:1文字で入力してください', 'match_value' => '『:label』は『:param:1』と一致していません', 'match_pattern' => '『:label』は『英数字と記号(@+-.)のみ』で入力する必要があります', 'match_field' => '『:label』は『:param:1』と一致していません', 'valid_email' => '『:label』が不正です', 'valid_emails' => '『:label』に不正なメールアドレスが含まれてます', 'valid_url' => '『:label』は不正なURLです', 'valid_ip' => '『:label』は不正なIPアドレスです', 'numeric_min' => '『:label』は:param:1以上で入力してください', 'numeric_max' => '『:label』は:param:1以内で入力してください', 'valid_string' => '『:label』は『英数字と記号(@+-.)のみ』で入力する必要があります', 'checkbox_require' => '『:label』は:param:1つ以上選択する必要があります', 'unique' => '『:label』はすでに登録してあります。', 'uniquemail' => '『:label』はすでに登録してあります。', 'phone_number' => '『:label』は『数字とハイフン』で入力する必要があります' );
valid_stringのルールのエラーメッセージを一応設定はできる。
<?php $form->add('zip_code', '郵便番号', ['type' => 'text', 'class' => 'form-control']) ->add_rule('required') ->add_rule('valid_string','numeric');
例えばこの場合、郵便番号のフォームで数字のみのルールにしても、valid_stringのルールのエラーメッセージの設定値として '『郵便番号』は『英数字と記号(@+-.)のみ』で入力する必要があります'と表示されてしまう。
しかし、入力フォームが複数あって、それぞれのフォームに細かなルールを設定して別々のエラーメッセージを表示したい場合に困る。
<?php // 郵便番号は数字のみ $form->add('zip_code', '郵便番号', ['type' => 'text', 'class' => 'form-control']) ->add_rule('required') ->add_rule('valid_string','numeric'); // アクセスキーは英数字のみ $form->add('access_key', 'アクセスキー', ['type' => 'text', 'class' => 'form-control']) ->add_rule('required') ->add_rule('valid_string','alphanumeric'); $form->validation()->set_message('valid_string', '数字のみで入力する必要があります');
とすることもできるが、valid_stringのルールに対して1つしかメッセージを設定できない。
この場合、アクセスキーのフォームのエラーメッセージは'英数字のみで入力する必要があります'と表示したいが'数字のみで入力する必要があります'となる。
<?php $form->add('zip_code', '郵便番号', ['type' => 'text', 'class' => 'form-control']) ->add_rule('required') ->add_rule(['zip_code' => function ($zip) { return (bool)preg_match('/^[0-9]+$/', $zip); }]); $form->validation()->set_message('zip_code', '郵便番号は数字のみで入力する必要があります');
個別にルールをクロージャで設定すると、細かなバリデーションエラーのメッセージを表示することができる。