Zend Framework 2 で、Zend\Form\Form
という名前の拡張クラスを作成しましたMyForm
。
1 つのindexAction
Controller クラスで、次のMyForm
ように初期化し ます。
public function indexAction()
{
$form = new MyForm('my-name');
$viewModel = new ViewModel(array('form' => $form));
return $viewModel;
}
次に、対応するビューで、基本的には
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($this->form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
これはすべて機能しますが、フォームのアクションが欠落していることに気付いたかもしれません。
ビューに次のようなアクションを追加しようとしました:
$form->setAttribute('action', $this->url(NULL, array('controller'=>'Index', 'action' => 'go')));
次に、IndexController 内の go アクションで、テスト用にこれを用意しました。
public function goAction()
{
die('huh');
}
これはまったく機能しませんでした。常にフォーム ビュー (== インデックス アクション) に戻ります。go アクションが実行されないのはなぜですか?
また、アクション属性をハードコーディングして、セグメント ルートに処理を任せることも、独自のルートを定義することもできることもわかっています。
フォーム アクションが独自のルートを取得する必要があるのはどのような場合ですか?
セグメント ルートを使用してフォーム アクションを処理する必要があるのは、どのような場合ですか?
私の例のように、どのような場合にフォーム アクションを処理する必要がありますか?
これに厳密なルールがない場合: 異なるアプローチはどのような意図を伝えているのでしょうか?
ビューの代わりにコントローラーにフォーム アクションを追加することもできますか?