CakePHPでのフォームデータの受け渡しについて

このQ&Aのポイント
  • CakePHPでフォームデータの受け渡し方法を解説します
  • フォームデータは$this->dataに格納されますが、他の場所でも使用するにはどうすればいいですか?
  • 申込フォームと確認画面の作成方法とデータの引継ぎについて教えてください
回答を見る
  • ベストアンサー

CakePHPでのフォームデータの受け渡しについて

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

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

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

  • ベストアンサー
回答No.1

根本的に間違っていると思われる、 $this->redirect のメソッドは、指定したアクションをダイレクトに起動するだけのはず、自分のところのソースでも 問答無用に飛ばす場合や、固定的な帯なんかの表示に使っています。 一応、セッション変数なんかは維持できますけど、違うよねぇ。 私は $this->render なんかでやってますね。

yuri805
質問者

お礼

ありがとうございます。 確認画面へ値を引き継ぐことができました。 上記方法で確認画面には引き継ぐことができたのですが、もし「確認画面」で修正箇所に気がつき、元のフォームに値を引き継いで修正したい場合、このような場合はどのようにしたら良いのでしょうか?

関連するQ&A

  • cakephp2.5のフォームデータの受け渡し

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

    • 締切済み
    • 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
  • cake php データの受け渡し

    cake php データの受け渡し 最近CakePHPを始めた者です。 初投稿ですがよろしくお願いします。 controllersからviewにThis->setで値を渡しているのですが、上手くいきません。 view側 <p><?php $err;?></p> controllers function edit(){ $data = $this->Rock->find('all'); $this->set('data',$data); } function delRecord(){      $err = "passの値が間違っています。";      $this->set('err',$err); $this->redirect('./edit'); }

    • 締切済み
    • PHP
  • 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
  • cakePHPでFormを使用したDBへの登録

    cakePHP初心者です。 ブラウザで入力画面→確認画面→完了画面と遷移して、 DBに入力した値を登録する基本の動きをさせたいのですが、 Controllerの動きが分かりません。 Viewのファイルを 入力画面:entry.ctp 確認画面:confirm.ctp 完了画面:complete.ctp とします。 1.SampleControllerからentryページを表示 public function entry(){ } 2.etntry.ctpでFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> 3.SampleControllerでconfirmメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ データを画面にセット? } } 4.confirm.ctpが表示され、登録ボタンを押すと完了画面にFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'complete')) . PHP_EOL; ?> 5.SampleControllerでcompleteメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ バリデーションチェック後、DBに登録? } } この流れでよいのでしょうか。 完了画面のcompleteでバリデーションチェックを行うことに違和感を感じています。 仮にconfirmで実施するとしても、書き方が良く分かりません。 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> と書いたら、3の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

    • 締切済み
    • 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でバリデート

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

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

    CakePHPを勉強中です。 データベースからのデータ取得が出来ないのでご教授ください。 $test=$this->User->findCount(); の場合、きちんとカウントを取得できているのですが $test=$this->User->find('All'); の場合 何も帰ってこない(empty)になってしまいます。 MySQL 照合順序:utf8_general_ci cakephp-1.2.10 何卒よろしくお願いいたします。

    • ベストアンサー
    • 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 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

専門家に質問してみよう