1

私は 3 つの単純なフォーム処理関数を書いています。バリデーションチェックの後の部分を除いてすべて同じなので、バリデーション if 命令までのコード全体を含む一種の「テンプレート」関数を作成することにしました。

したがって、これら 3 つの関数には、適切なフォーム処理を担当するコードのみが含まれています。

テンプレート関数は次のようになります。

public function templateAction($formName) {
   $form = $this->createForm(new {$formName.'Type'}() new $formName());
   $request = $this->getRequest();
   if($request->getMethod() == 'POST') {
      $form->bind($request);
      if($form->valid()) {
         $this->{'set'.$formName}($form);
         return array();
      }
   }
}

Fooフォームがあり、その名前 (Foo) をパラメーターとして渡すと、その名前だけに基づいてフォームがレンダリングされ、その名前を含む対応するプライベート メソッドが取得されます。


問題は、関数を使用$this->redirect()してこの「テンプレート」メソッドを呼び出し、適切なパラメーターを渡すにはどうすればよいかということです。

/**
 * @Route("/FooController/Template/{formName}", name="/FooController/Template/{formName}")
 */

これは機能しません - sf はルートが見つからないというエラーをスローします...他の組み合わせもいくつか試しましたが、どれもうまくいきませんでした...これをどのように処理すればよいですか?


この「テンプレート化」フォーム処理方法は問題ありませんか? 繰り返しを減らすかもしれないと思っていましたが、検証部分の前に別のコードを持つはずのメソッドが 1 つあるとしたらどうでしょうか?


また、フォーム処理をコントローラーから分離して別の場所に置く方法はありますか?

4

1 に答える 1