1つのフィールドにバリデーションエラーを1つだけ表示させる方法

CakePHP3では複数のバリデーションルールを設定すると、標準ではすべてのルールのチェックが行われます。
バリデーションエラーがあった場合、フィールド個別にエラーを表示させるには次のようにします。

<?php echo $this->Form->error("【フィールド名】");?>

1つのフィールドに複数のエラーがあると複数行のエラーが表示されます。

1つのフィールドでバリデーションエラーがあった場合、最初に引っかかった1つだけを表示するにはバリデーターに 'last' => true を付けます。
'last' => true を付けた項目で、バリデーションエラーに引っかかると、そのフィールドでは以降のバリデーションチェックが行われなくなります。

class HogeTable extends Table
{
    public function validationDefault(Validator $validator)
    {
        $validator
        ->add('【フィールド名1】',
            '【ルール名1】' , [
                'rule' => '【ルール】',
                'message' => '【表示するエラー】',
                'last' => true,
        ]);

        // 【ルール名1】で引っかかると、【ルール名2】のチェックは行われない。
        $validator
        ->add('【フィールド名1】',
            '【ルール名2】' , [
                'rule' => '【ルール】',
                'message' => '【表示するエラー】',
                'last' => true,
        ]);

        // 【ルール名1】で引っかかっても、フィールド名の異なる【ルール名3】のチェックは行われる。
        $validator
        ->add('【フィールド名2】',
            '【ルール名3】' , [
                'rule' => '【ルール】',
                'message' => '【表示するエラー】',
                'last' => true,
        ]);
        return $validator;
    }
}

この場合、【ルール名1】でエラーがあると、【ルール名2】のチェックは行われません。
【ルール名1】でエラーがあっても、フィールド名の異なる【ルール名3】のチェックは行われます。

関連記事

スポンサーリンク

gzip ファイルを圧縮・展開する(拡張子.gz)

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る