あるテーブルの一括更新を考えています。
Formタグがネストできないので、その方法を探しているのですが、Cakeのサイトでの説明ページ(https://book.cakephp.org/2/ja/core-libraries/helpers/form.html)では
バージョン 2.5 で変更: inline と block オプションが追加されました。これらは、リンクを返す代わりに 生成されたフォームタグのバッファリングができます。これは、ネストされたフォームタグを 避けることを助けます。 'inline' => true 設定は、 フォームタグを postLink コンテントブロックもしくは、 block オプションで指定したカスタムブロックに追加します。
とあり、Blockオプションを利用すれば、メインのフォーム外にうまくネストされたフォームを書いだしてくれるようなことが書かれています。
これを利用したいのですが、その方法がどこにも書かれておらず、利用方法をご存知の方おられましたらご教授ください。
以下、実際はとあるモデルのアソシエーション先を全一括更新させるような仕組みなのですが、通常のテーブルでも行全般の一括更新&個別行削除はありえるので、そうしています。
コントローラー
php
1$this->request->data = $this->Model名->find('all');
ビュー
php
1echo $this->Form->create("Model名"); 2 3$i = 0; 4/* Model名のデータを一行づつ吐き出す */ 5foreach($this->request->data["Model名"] as $line) 6{ 7 echo "<div>"; 8 echo $this->Form->hidden('Model名." . $i . ".id'); 9 echo $this->Form->text("Model名." . $i . ".hoge"); 10 //▼この削除フォームが問題 11 $this->Form->postLink("削除", 12 [ 13 //第1引数でフォームaction先(URL)を指定 14 "action" => "delete", 15 $line["id"] 16 ], 17 [ 18 //第2引数:ここにBlockオプションを指定できそうなのですが、下記のように書くとbuttonタグの中に「block=true」と書かれるだけでした。 19 "block" => true //A 20 ]); 21 echo "</div>"; 22 $i++; 23} 24 25<?php echo $this->Form->end("更新"); ?>
ソースで見ると削除ボタンを削除Formタグが囲うように出力されており、全体を更新するFormの中に行の削除フォームが入っているように見えるのですが、ブラウザのデベロッパーツールで確認すると・・・
・最初の行のデリートフォームが存在しない
・最後の全体更新ボタンがフォーム外に出てしまっている
などの不具合があったため、予想通り動作せず困っております。
【追記】
いただいたコメントにより、そもそもフォームヘルパーのpostButtonを利用するのは不可能だとわかりました。
そうするとpostLinkを使うしか無いのですが、上記の通り「blockオプション」を利用すればできそうです。
しかしそれも詳細がわからず、普通に書くだけではFormにネストしたFormができてしまい、うまく動きません。
またcakephpの説明にあるようにBlockオプション(ソース中A行)を指定したところ、たしかに削除用のFormタグはすべて消えたのですが、削除で送信されるべきFormタグがどこにも書かれていないので、hrefに自動生成される"#"が効くだけで、同ページが再読込されるだけの状態です。
"block" => trueを指定した上で、何か別の場所にフォームを履く呪文が必要なのでしょうか?
回答1件
あなたの回答
tips
プレビュー