これは簡単に聞こえるかもしれませんが、私にとっては混乱を招きます。既存のデータベース エントリを編集するためのフォームに取り組んでいます。一部のフィールドは、結合されたテーブルのレコードに基づいて作成および入力されます。
これは少し大雑把に聞こえるので、図解してみます。Content という名前のコンテンツを持つテーブルと、ファイル名と場所を保持する Files という名前のテーブルがあります。提供されたコンテンツIDに基づいてファイル名を取得すると、フォームがフィールドを作成し、これらにファイル名が入力されます。
public function setFiles($files) {
$i = 0;
foreach ($files as $file) {
$i++;
$fieldname = "encloseditemname{$i}";
$this->addElement('text', $fieldname, array('required' => true,
'label' => 'Enclosed item name (test)',
'value' => $file['file_url'],
));
}
}
これは問題なく動作しますが、ファイルの 1 つを削除できるボタンを追加したいと思います。だから私がすべきだと思ったのはfileDeleteAction()
、コントローラーで を作成し、ボタンをそのアクションにリダイレクトし、データベースのエントリを削除してから、フォームでビューをレンダリングすることです。
アクションに別のビューをレンダリングさせると、それは標準ビューであり、問題ではありません。データベースのエントリを削除するコードを書くことも問題ではありません。addElements メソッドをファクトリとして使用して削除アクションにリダイレクトするボタンを作成する...大きな問題。これが私が得た距離です。
$this->addElement('button', "deleteencloseditem{$i}", array( ??? ));
フォームを送信してコントローラーの editAction を呼び出すために使用されるフォームの下部にある送信ボタンを妨げずに、このボタンを削除アクションにリダイレクトするにはどうすればよいですか。
どのボタンが押されたかを検出するために JavaScript を少し使用することを検討しましたが、まだ JavaScript を使用できず、ボタン名と ID が setFiles 関数に依存しているため、どのボタンが押されたかを見つける方法を見つけるのに苦労しています。したがって、フォームにプッシュするファイル名の量deleteencloseditem1
にdeleteencloseditem5000
応じて、範囲を変えることができます。
どうすればこれを行うことができますか? ヒントやアドバイスは大歓迎です:)