waste of time

主にPHP

CakePHP2.5.4でフォームのバリデーションエラー時に指定したメッセージが出ない

最近ドットインストール見ながらCakePHP習得し始めたんですが、モデルに指定したバリデーションエラーメッセージと異なるエラーメッセージが表示されて困ってました。

Model

<?php
class Post extends AppModel {
    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty',
            'message' => '必須入力項目です。'   // ←これ表示させたい!
        ),
        'body' => array(
            'rule' => 'notEmpty',
            'message' => '必須入力項目です。'   // ←これ表示させたい!
        )
    );
}

View

<h2>Add post</h2>

<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => 3));
echo $this->Form->end('投稿する');

で表示させると、モデルで指定したメッセージと違う。

CakePHP 2.3.10でモデルに指定したフィールドのバリデーションエラーメッセージが無視される問題 | jugedred.net

上の記事にある通り、HTML5の属性が自動で付加されてブラウザのエラーメッセージが優先されてしまうようです。以下のように'required' => falseを追記することで、HTML5のrequired属性を無効化してCakePHP側で設定したメッセージを表示することが出来るようになりました。

View

<h2>Add post</h2>

<?php
echo $this->Form->create('Post');
echo $this->Form->input('title', array('required' => false));
echo $this->Form->input('body', array('required' => false, 'rows' => 3));
echo $this->Form->end('投稿する');