1

Zend Framework 2 で、Zend\Form\Formという名前の拡張クラスを作成しましたMyForm

1 つのindexActionController クラスで、次の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 アクションが実行されないのはなぜですか?

また、アクション属性をハードコーディングして、セグメント ルートに処理を任せることも、独自のルートを定義することもできることもわかっています。

フォーム アクションが独自のルートを取得する必要があるのはどのような場合ですか?
セグメント ルートを使用してフォーム アクションを処理する必要があるのは、どのような場合ですか?
私の例のように、どのような場合にフォーム アクションを処理する必要がありますか?

これに厳密なルールがない場合: 異なるアプローチはどのような意図を伝えているのでしょうか?

ビューの代わりにコントローラーにフォーム アクションを追加することもできますか?

4

1 に答える 1