この問題は、CakePHP 1.3 で書かれたアプリケーションを保守しているときに発生しました。ドキュメントを読むことはできますが、Cake に関する私の経験はかなり限られていることを覚えておいてください。
アプリケーションには Widget モデルと WidgetController があります。ウィジェットを編集するとき、ユーザーが選択できるオプションの 1 つは、3 つのモードのいずれかでデータを大量にウィジェットにインポートすることです。つまり、ウィジェット データをインポートしたものに追加、削除、または置き換えます。
現在の実装は完全に混乱しています (ウィジェットがサポートする 10 ほどのさまざまなミューテーション機能をすべて実行する「編集」アクションがあります。送信されたフォームからパラメーターをスニッフィングすることによって正確に何をすべきかを決定します)。大量のもの」を新しいアクションに:
function batch($id)
{
// massively apply data to Widget $id; either add, remove or replace
}
このアクションは、「編集」ビューのフォームによってトリガーされます。
// Only relevant elements shown
echo $form->create('Widget', array('enctype'=>'multipart/form-data', 'action' => 'batch')); ?>
echo $form->input('id');
echo $form->input('action', array('type'=>'select',
'options'=>array(
'append'=>__('Append', true),
'replace'=>__('Replace existing', true),
'delete'=>__('Delete specified', true)
));
echo $form->end(); ?>
現状では、このフォームはaction
パラメーターをWidget
配列にバンドルしており、コントローラーからそれを取得できる唯一の方法は$this->data['Widget']['action']
.
これは醜く意味的に間違っているので、もっと良い方法があることを願っています。
理想的には URL に提出したいのですが、その部分が固定されていない/widget/batch/X/append
ため、それはできません。append
だから私はこれらのいずれかで解決します:
- どういうわけか、次のようなコントローラーパラメーターとしてアクションを渡します
$id
- 何らかの方法でアクションを名前付きパラメーターとして渡し、許可します
$this->params['named']['action']
- カスタムルートをインストールする必要がなく、JavaScript を必要としない他の方法
Cake 1.3 はこれを行うことができますか?