私は 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 つあるとしたらどうでしょうか?
また、フォーム処理をコントローラーから分離して別の場所に置く方法はありますか?