• 締切済み

CakePHPでvalidateのメッセージの表示

バリデーションで設定したエラーメッセージをsetFlashで表示したいのですが、 エラーメッセージ(下記のhoge)を取得する方法はありますか? CakePHP 2x Model public $validate = array( 'username' => array( 'rule' => 'notEmpty' 'message' => 'hoge' ) ); Controller $this->Session->setFlash('test'); $this->redirect('index');

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

$this->Model->save() のあとに、$this->Model->invalidFields() でエラーが出たフィールド名と、validate に定義されているmessage が連想配列で取得できます。 入力に関係なく直接取り出すなら、public propaty ですから、そのまま配列のキーを指定してやればいいですよ // Controller method 内記述 $message= $this->Model->validate['username'][message'];

sasaki027
質問者

お礼

回答ありがとうございます。 早速実行してみたのですが、save後にinvalidFields()で メッセージが二重になって返ってきました。 何が原因かわかりますか? if($this->Model->save($data)){ echo "成功"; } else { debug($this->Model->invalidFields()); } array( 'username' => array( (int) 0 => 'hoge', (int) 1 => 'hoge' ) )

関連するQ&A

  • CakePHPのValidateメッセージの改行

    CakePHPのValidateメッセージの改行方法を教えてください。 「エラーメッセージです」 というメッセージを 「エラー」 「メッセージです」 というように2行で出力したいのです。 下記のように<br/>を入れてメッセージを設定してみたのですが、 「<div class="error-message">エラー&lt;br/&gt;メッセージです</div>」 というソースが出力され、ブラウザ上でも「エラー<br/>メッセージです」と そのまま表示されてしまいます。 var $validate = array( 'test' => array( array( 'rule' =>VALID_NOT_EMPTY, 'message' => "エラー<br/>メッセージです" ) );

    • ベストアンサー
    • PHP
  • cakePHPについて

    現在、cakePHPを勉強しているのですが、分からなくて進めない箇所があり困っています。 ユーザーがフォームからデータを入力し、DBにデータを格納する際、フォーム項目にないデータを一緒に入力するためにはどうすればいいのか分かりません。 例)ユーザーフォーム入力欄 name email password ↓ ■DB側に格納したいデータ id(AUTO_INCREMENT) contact_id(問題箇所) name email password created modified 現在、下記のようなコードになっているのですが、ご教授頂ければ幸いです。 ■Controller/RequestController public function index(){ if(!empty($this->request->data)){ if($this->request->data[$this->Request->alias]['confirmed']){ //保存実行 //成功時に画面遷移・失敗時にメッセージを表示 if($this->Request->saveAll($this->request->data)){ $this->Session->setFlash('お申し込み有難う御座います。新規依頼が完了しました。'); $this->redirect(array('action' => 'index','controller' => 'details')); }else{ $this->request->data[$this->Request->alias]['confirmed'] == false; $this->Session->setFlash('新規依頼に失敗しました。'); } }else{ if($this->Request->saveAll($this->request->data, array('validate' => 'only'))){ //saveALLは値をまとめて保存するモデルメソッドだけど('validate' => 'only')にすることで //保存処理を行わずにバリデーションのみを実行することができます //入力データに問題がなかった場合は確認画面を呼び出し $this->render('confirm'); }else{ $this->Session->setFlash('エラーがあります。入力内容をご確認下さい。'); } } } }

    • 締切済み
    • PHP
  • cakephp動的アソシエーションについて

    お世話になっております。 cakephpでアソシエーションをコントローラ側で設定しようとしたところ $this->Model->bindModel(array(‘hasOne’=>array(‘Model_3′))); このような形にされてるのが多いのですが $this->Model->hasMany = array('Model' ); こちらのようにコントローラー側で直接変数に モデル設定してはいけないのでしょうか?

    • ベストアンサー
    • PHP
  • cakephpのバリデーションについて。

    cakephpのバリデーションについて。 windowsxp環境にxamppをインストール php:5.3.1 cakephp:1.2.6 mysql:5.1.41 書籍を読みながらcakephpを始めました。 現在 フォームで入力された項目に該当する データをmysqlのデータベースで検索後、 結果をビューに表示するものを作っています。 フォームヘルパーを使用し、inputされたデータを コントローラ側で受け、その値をモデルで検索後 ビューへ渡しています。 このようなデータベースに保存は行わない検索だけの場合 フォームに入力されたデータをcakePHPのバリデーション機能 を利用してチェックできるのでしょうか? ビューでは $form->input('form.text1'array('label'=>'検索対象1')); $form->input('form.text2'array('label'=>'検索対象2')); としています。 このform.text1とform.text2について未入力の場合など エラーチェックが行いたいです。 そもそもこのような場合のエラーチェックは コントローラーに処理を記述しバリデーションは利用しないのかなど、 どなたかアドバイスいただけると助かります。

    • ベストアンサー
    • PHP
  • CakePHPでの自作関数保存場所

    PHP 5.0.4 CakePHP Version1.1 CakePHPのモデル内でコールバック関数として登録したい関数を作成したのですが、その関数をどこに記述してよいか分かりません。今のところ下記のようにモデル内のクラス定義の外に定義しています。 <?php class Hoge extends AppModel { var $name = "Hoge"; function gethoge(){ ・・・・ return array_map("hoge_callback",$hoge_array); } } function hoge_callback(){ ・・・・ } ?> ただこれだと”hoge_callback()”を他のモデルでも使いたい時にそのモデル内でも記述しないといけません。どこか1箇所にまとめて置いてきそれを参照するようなスマートな方法はないでしょうか(できればモデル内だけでなくコントローラやビューでも使えるとうれしいです)?「CakePHPでは自作関数は”ここ”に登録する」といったようなルールがありましたらご教示頂ければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHP 1.3について

    CakePHPが初心者です。 Views-userdetail-index.ctpにて <?php echo $form->create(null,array('type'=>'get','action'=>'./updateRecord')); ?> ~ <?php echo $form->textarea("User.remarks", array("cols" => 22,"rows" => 2)); ?> ~ を記述し、userdetail_controllerにて function updateRecord(){ if (!empty($this->data)){ $this->User->id = 1; $this->User->saveField('remarks','exists'); } else { $this->User->id = 1; $this->User->saveField('remarks','empty'); } $this->redirect('.'); } を記述しています。 しかし、どうしても「!empty($this->data)」の判別によってemptyとなってしまいます。 User.remarksの部分をUserdetailにして色々ためしましたが、どうしても値の受け渡しがうまくいかないのです。 どなたかご教授を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • cakePHPのサンプルブログで検証エラーが出ない

    cakePHP初心者です(まだはじめて数時間くらい) で、cookbookにそってサンプルブログを組んでいるのですが、 http://book.cakephp.org/2.0/ja/getting-started.html のとおり、 Postモデルに class Post extends AppModel {    public $validate = array(       'title' => array(          'rule' => 'notEmpty'       ),       'body' => array(          'rule' => 'notEmpty'       )    ); } (↑タブを全角空白4文字に変換してます) と入れてsaveしたものの、 title,bodyを空で投稿しても、エラー表示されず投稿できてしまいます (投稿一覧にも表示されます) FWを使わないで自力で組むなら、自分なりにエラーを見つけられるのですが、 まだcakePHPになれていないため、 このバグの原因を追求するためになにからはじめたらいいのかわかりません。 どなたかお教えいただけないでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • CakePHPのsyntaxエラーについて

    お世話になります。 CakePHPでサイト構成をしています。 教本に従ってコードを書いています。 最も簡単なサイトを作るという章で、MyPagesContorllerを作り、Viewにindex.ctpとedit.ctpを作り、ModelにUser.php、 ContollerにUsersController.phpを作りました。 ユーザーの一覧表示まで出来ましたが、編集機能を作るところでつまずいてます。 UsersController.php <?php class UsersController extends AppController { //モデルの指定(users) public $uses = array('User'); //レイアウトの指定(defaultの場合はなくても動作する) public $layout = 'default'; //indexアクション public function index () { $userData = $this->User->find('all'); //Viewにデータを送る $this->set('userData', $userData); } } //editアクション public function edit($id = null) { if($this->request->isPost() || $this->request->isPut()) { if(!empty($this->data)) { if($this->User->save($this->data)) { $this->Session->setFlash('保存しました'); $this->redirect(array('action' => 'index')); return; } } 下記の様なエラーが表示されてしまいます。 Error: syntax error, unexpected 'public' (T_PUBLIC) 本にある通りに記述して、何度も確認しましたが間違いが見つけられません。 写真に添付しているline20の前後を見ても特にミスは無い様に思えます どこが間違っているのでしょうか。。。 ちなみにeditアクションのソースを消すと、エラーは表示されません。 どなたかご教授頂けないでしょうか。 宜しくお願いいたします。

  • CakePHPのバリデーションエラー表示について

    CakePHPの入力フォーム作成中で、バリデーションエラーがあった場合、{$form->error('')}で各項目部分にエラーを表示させています。 しかし入力項目が多いため、ページ下部でエラーが発生しても、エラーが起きているのかどうかひと目では分かりません。 1つでもバリデーションエラーがあったとき、ページ上部にエラーメッセージ表示をするにはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • CakePHP Undefined index

    CakePHP(cake_1.2.1)にて、ユーザーログイン機能を作成しようとしてます。 class UsersController extends AppController{ var $name = 'Users'; var $uses = array('User'); // Userモデルを使用 var $needAuth = true; // ログイン必須のフラグ /* * ログインページ */ function login() { // ページタイトルの設定 $this->pageTitle = 'Web-local.community「local.SNS」'; // データが送られてきたら if(!empty($this->data)){ // パスワードを暗号化 $this->data['User']['pwd'] = md5($this->data['User']['pwd']); // 入力された[id]と[pwd]がデータベースにある場合のみ[$user_data]に値が入る $user_data = $this->User->findByEmailAndPwd($this->data['User']['email'], $this->data['User']['pwd']); ・・・ というコントローラーをWebサイトの先人様のを参考にして試作しているのですが、あらかじめ作成したusersテーブルに登録しておいたユーザーのメールアドレス、パスワードを入力して、ログインボタンを押すと、 Notice (8): Undefined index: User [APP\controllers\users_controller.php, line 18] Notice (8): Undefined index: email [APP\controllers\users_controller.php, line 20] というエラーが出て困ってます。"User"、"email"は、知りませんと言っているのでしょう。 モデル等の宣言の箇所で、 // var $name = 'Users'; // var $uses = array('User'); // Userモデルを使用 あるいは、 // var $name = 'Users'; var $uses = array('User'); // Userモデルを使用 あるいは var $name = 'Users'; // var $uses = array('User'); // Userモデルを使用 とコメントアウトしても、前記エラーは変わりません。Webをいろいろ検索しても、解決策が見当たらず、投稿させていただきました。何か、設定が抜けているのでしょうか?どなたかすみませんが、教えてください。

専門家に質問してみよう