PHP

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

こんにちは!! CakePHPやってますか? 今日は休日なのですが自宅に引きこもってCakePHPの勉強を進めています! ちょっとつまずいた部分が出てきたので、いったん作業を中断してブログの記事をえっちらほっちら書いています。

つまずいた部分というのはですね、CakePHPでモデルに書いたバリデーションのエラーメッセージが指定した文章にならない、という問題です。どういうことかというと、

class Board extends AppModel {
  public $name = 'Board';

  public $validate = array(
    'name' => array(
      'rule' => 'notEmpty',
      'message' => '名前を入力してください',
    ), 
    'title'=> array(
      'rule' => 'notEmpty',
      'message' => 'タイトルを入力してください',
    ),
    'content' => array(
      'rule' => 'notEmpty',
      'message' => '内容を入力してください',
    )
  );
}

このようにBoardというモデルに存在する「name」「title」「content」の3つのフィールドを入力必須項目にして、エラー時のメッセージを

「XXを入力してください」

みたいにしたいのですが、そうならないのです。どうしてかなーと思いつつ、ソースコードを見た結果、ちょっと怪しい部分を発見!!

<input id="BoardName" name="data[Board][name]" required="required" type="text" />

後半の「required=”required”」という部分。これってHTML5で追加された属性ですよね。ソースコード中にこのrequiredが書かれていると、CakePHPで指定したエラーメッセージではなく、ブラウザが吐き出すエラーメッセージになってしまうようなんです。

ブラウザごとにこのエラーメッセージがどうなっているのか、ちょっと調べてみました。まずは私が普段使っているGoogle Chromeでのエラーメッセージはこんな感じです。

Firefoxでのエラーメッセージはこう。

IE10でのエラーメッセージはこう。

ブラウザによって全然違うやんけーーー。

ということで、まぁバリデーションはちゃんと出来ているので問題ないっちゃ~問題ないのですが、ここは自分で作成したオリジナルメッセージを表示させたいですよね!! というわけで、ブラウザの余計な機能には引っ込んでおいてもらって、自分で設定したメッセージを表示する方法を紹介します。

といっても、これはFormヘルパーが吐き出したコードにrequired属性が設定されているというのが理由なので、それをオフにするだけです。具体的にどうやるのかというと、

こうなっている部分を

echo $this->Form->text('Board.name');
echo $this->Form->text('Board.title');
echo $this->Form->text('Board.content');

こうするだけです。

echo $this->Form->text('Board.name',array('required' => false));
echo $this->Form->text('Board.title',array('required' => false));
echo $this->Form->text('Board.content',array('required' => false));

ヘルパーに渡す引数に「'required' => false」を追加するだけ。

こうするとHTML的にはバリデーションが利かなくなりますが、最初に設定してあるモデルのバリデーションまで無効になるということはなく、エラーメッセージもモデルで指定した文章で表示されるようになります!!

ちゃんと自分で設定したエラーメッセージになりました。
めでたしめでたし。

===

Twitterアカウント:@corekaraweb
⇒管理人・村上英輝が発信するフリーランスの日常を発信しています。WebライターやSEOライターのお役立ち情報もたまにあるかも! フリーランスの方やライターの方はフォローバックしておりますので、お気軽にフォローしてください!

facebookページ:コレカラウェブ
⇒「コレカラブログ」を含めたコレカラウェブのブログ運営の裏側を公開しています。ブログに公開する前の先行情報や運営方針などを記録しています。PVや収益に関する生々しい話も!よろしければ「いいね!」お願いいたします。

「いいね!」と思ったら、クリックお願いいたします<m(__)m>
にほんブログ村 小遣いブログ Webライター・ブログライターへ にほんブログ村 IT技術ブログ SEO・SEMへ にほんブログ村 小遣いブログ ブログアフィリエイトへ
ABOUT ME
村上英輝
2018年4月に開業したコレカラウェブ代表の村上英輝です。フリーランスとしてWebライティング・SEO対策・メディア運営・障害者支援のお仕事を一貫して承ってきました。現在はフルリモートのWeb制作会社でSEO担当者もやっています。このブログではコレカラウェブのお仕事で得たノウハウやテクニックを詳しく紹介しています。所有資格:Webライティング実務士・ウェブ解析士・SEO検定1級・情報セキュリティスペシャリスト・FP2級・AFPなど。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA