CakePHPでバリデート処理を行う方法

このQ&Aのポイント
  • CakePHPでバリデート処理を行う方法について質問があります。ビュー側ではformヘルパーを使用してフォームを作成し、コントローラ側では$this->Model->set($this->data);と$this->Model->validates();を使用しますが、実際にバリデート処理を行っているのはどちらの式なのでしょうか?また、フォームの内容がバリデートに合格した場合、$this->Model->validates()はtrueを返すのでしょうか?
  • CakePHPでのバリデート処理について質問です。ビュー側ではformヘルパーを使用してフォームを作成していますが、コントローラ側で$this->Model->set($this->data);と$this->Model->validates();を使用しているのですが、実際にバリデートが行われるのはどちらの式なのでしょうか?また、バリデートに合格した場合、$this->Model->validates()はtrueを返しますか?
  • CakePHPでのバリデート処理についての質問です。ビューではformヘルパーを使用してフォームを作成し、コントローラでは$this->Model->set($this->data);と$this->Model->validates();を使用していますが、バリデート処理はどちらの式で行われているのでしょうか?また、バリデートが成功した場合、$this->Model->validates()はtrueを返すのでしょうか?
回答を見る
  • ベストアンサー

CakePHPでバリデート

質問です。 CakePHPでバリデート処理を行っているのですが、 ちょっとつかめない箇所があります。 ビュー側でformヘルパーを用いてフォームを作っていますが コントローラ側で $this->Model ->set($this->data); $this->Model->validates(); でバリデートが行われると思いますが 上記二つの式のうち 実際にバリデート処理を行っているのはどちらのしきなのでしょうか? フォームの内容がバリデートにひっかからずに判定された場合 $this->Model->validates()でtrueが 返ると思います。 これはvalidatesメソッド内で判定してそのままtureを返しているということでしょうか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • foreach
  • ベストアンサー率51% (43/84)
回答No.1

>実際にバリデート処理を行っているのはどちらのしきなのでしょうか? 文字通り$this->Model->validates();のほうです。 端折って言うとsetメソッドはModelのdata配列に値をセットする機能です。 >これはvalidatesメソッド内で判定してそのままtureを返しているということでしょうか? そもそもvalidatesメソッドを直接叩くケースはかなり限られていると思います。 一般的にcakeのModelはそのままデータベースのテーブルを指しますので、validateする目的は保存する値が正常かどうかの判定になるかと思います。 保存する際に使う $this->Model->save($this->data) のメソッドは第二引数をfalseに設定しない限りデフォルトでset->validates->saveまでの一連の流れを実行してくれます。validateで引っかかればもちろん保存はされずsaveメソッドはfalseを返してくれますので、この戻り値を判定してエラーか否かが判別できます。 基本的にbakeして生成されるソースコードが参考になるかと思います。

関連するQ&A

  • 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.2.6 CakePHP 1.2 データベースを使わずにフォームを作成する場合 <?php echo $form->create('Contact', array('action'=>'entry', 'method'=>'post')))?> と記述するとデータベースに接続しようと、してしましす。 もちろんモデル側では、 var $useTable = false; としてるのですが、どのようにしたらよいのでしょうか? よろしくお願いいたします。

  • cakephp動的アソシエーションについて

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

    • ベストアンサー
    • PHP
  • cakephp2の多言語化について

    cakephp2でシステムの多言語化について勉強しております。 コントローラ、モデル、ビューにて__()メソッドを使用すると自動で多言語化してくれるのは 確認しました。 しかし、スクリプト内でアラート等のメッセージまで対応するとなるとどうすればよいか わからなくなりました。 ご存知の方いらっしゃいましたら宜しくお願いします。 <? $this->append('script'); ?> <script type="text/JavaScript"> <!-- $(document).ready(function(){ alert("__('削除')"); }); --> </script> <? $this->end(); ?>

    • ベストアンサー
    • 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
  • CodeIgniter/set_value()

    CodeIgniterのset_value()メソッドが2つある理由。その違いは何でしょうか? ・/system/helpers/form_helper.php ・/system/libraries/Form_validation.php それぞれに「set_value($field = '', $default = '')」がありますが、 この二つはどう違うのでしょうか? set_value()メソッドが書いてあるviewが、 どちらのメソッドを呼んでいるか、 どこで判断すればよいのでしょうか? form_input( 'name', set_value('name') ) ▽フォームヘルパー   http://codeigniter.jp/user_guide_ja/helpers/form_helper.html ▽フォームバリデーション(検証)   http://codeigniter.jp/user_guide_ja/libraries/form_validation.html

    • ベストアンサー
    • PHP
  • cakephpのビューの使い方

    cakephpのビューの使い方 windowsxp環境にxamppをインストール php:5.3.1 cakephp:1.2.6 書籍を読みながらcakephpを始めました。 フォームを利用するサンプルを試しています。 コントローラーで変数に値をセットし ビューでの変数の表示方法の記述がよくわかりません。 コントローラで $this->set("result",$result); とし ビューctpで <html> <body> <h1>送信結果</h1> <p><?=$result ?></p> </body> </html> と記述されているのですが、ブラウザには変数が表示されません。 <?php echo $result ?>と書けば表示されるのですが <?=$result ?>という書き方ですとなにも表示されません。 どなたかアドバイスをいただけると助かります。 作成日: 2010年4月2日(金) 21時05分

    • ベストアンサー
    • PHP
  • CakePHPでのフォームデータの受け渡しについて

    CakePHPでフォームから送られてきたデータは$this->dataに格納されていますが、フォームから送られてきた$this->dataを「フォームの送信先」以外で使うにはどのようにしたら良いのでしょうか? $this->set('test', $this->data); $this->redirect(array( 'action' => 'confirm' )); などとして、confirmで$testをprしてみたのですが、この方法では送られないようです。 よくある、申込フォーム→確認画面、のようなものを作りたいのですが、バリデーションを行う都合もあり申込フォーム自身をフォーム送信先に指定しており、完全に内容が入力された状態になったら確認画面に移行する、というイメージなのですが、この「確認画面」にフォーム送信値の$this->dataを引き継ぐ方法がわかりません。 解決法をご存知の方、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • cakephp2.5のフォームデータの受け渡し

    CakePHP2.5でフォームからpostでデータをコントローラで受け取って 別のページで表示するにはどうすればいいでしょうか フレームワークを使用しない普通のPHPならば以下のようになります。 $_POST('paramater'); ただ、CakePHPの場合だとどのようにしていいか不明です。 調べた結果以下のものが出てきたのですが 今回はモデルを使用しないでデータを受渡ししようと思っています。 $this->request->data['model']['field']; モデルを利用しないでデータの受け渡しをする方法をお教えください。 なかなかいい参考資料も出てきません

    • 締切済み
    • PHP
  • cakephpで手動でバリデーションを行う方法

    現在cakephpでWEBサービスを作成しています。 このサービス内である情報を登録する機能があるのですが、複数ページで情報を入力していき、 最後の確認ページでそれまで入力した情報を表示して、[登録]ボタンをクリックすると 情報をDBに登録する、というものです。 また、入力値のバリデーションはページ毎に行い、問題無ければ次のページへ、 エラーがあれば元ページでエラーを表示します。 このような造りのため、ページ遷移ごとにModelのvalidates()メソッドを活用して手動で検証を 行っているのですが、このメソッドではアソシエーション先のテーブルの検証が行われません。 手動でバリデーションを行うときに、アソシエーション先も含めて検証を行うことは出来ないのでしょうか。 また、他にいい解決策があれば、教えていただけると幸いです。

    • ベストアンサー
    • PHP