CakePHPについて解決できない問題がありましたので質問いたします。
テンプレートからコントローラ、アクションを指定して画面遷移する際に出てきた問題です。
詳細やソースコードは以下となります。
よろしくお願いします。
###前提・実現したいこと
テンプレートに配置してある複数のボタンのいずれかを押下することで
それぞれ指定のコントローラ、アクションへデータを送信し、コントローラー側はそのデータを受信、加工したい。
要は複数ボタンを配置したときに、それぞれのボタンで別のアクションを指定してデータを渡す方法が知りたいです。下記の方法以外で良い方法がありましたらご教授くださるとありがたいです。CakePHPのForm関連の機能のみで実現可能なものなのでしょうか。
###発生している問題・エラーメッセージ
detailテンプレートからpostButtonを複数展開してアクションを指定しているのだが、データの送受信ができない。
###該当のソースコード
(detailテンプレート) <?= $this->Form->create(null, ['type' => 'file', 'autocomplete' => 'off', 'class' => 'XXXXX']) ?> ~テンプレート内表示処理~ <?= $this->Form->end() ?> <div class="buttons"> <?php echo $this->Form->postButton(__('実行する'), [ 'controller' => 'pay', 'action' => 'detailSave', 'data' => $status, $id ]); echo $this->Form->postButton(__('キャンセル'), [ 'controller' => 'pay', 'action' => 'search' ]); ?> </div> (detailSaveアクション) public function detailSave() { // データ受取 $param = $this->request->getData(); 〜加工処理〜 // 送信データをセット $this->set('data', $param); // finishアクション、テンプレートへ遷移 $this->setAction('finish'); }
###試したこと
データを送信する処理はForm->postButtonを使用。
コントローラー側で$paramの中身をデバッグ文で表示させましたが、中身は空。
cakephpのマニュアルに「開かれたフォームの中でこのメソッドを使用しないでください。 」とありますので$this->Form->createと$this->Form->end()の外にボタンを配置しています。しかし、渡したいデータである$status, $idなどはこの$this->Form->createと$this->Form->end()間にあります。この外では送信したいデータを渡すことはできなかったりするのでしょうか。
$this->Form->createと$this->Form->end()の中で複数postButtonボタンを指定しても上手く動作しない。代わりにsubmitボタンを配置しましたが、ここにリンクを貼れば良いのでしょうか。記述の仕方がわからないのとURLにパラメータは増やしたくないです。
参考サイト
https://book.cakephp.org/3/ja/views/helpers/form.html
###補足情報(言語/FW/ツール等のバージョンなど)
Apache/2.4.37 (Amazon)
PHP 7.1.25
CakePHP version 3.3.9
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。