まず、 GET と POST だけでなく、仕様に従っていくつかのメソッドが利用可能です。
これはセキュリティ上の理由ではないと思います。標準を尊重することが問題です (例: REST メソッド)。
私は個人的に、いくつかの行動に対してさまざまな方法を使用しています。私にとっては、エディションを見て、エディションを適用するというアクションがあります。
これは、1 つの URL に対する 2 つの異なる動作です。終盤のレスポンスは変わらなくても、コントローラーレベルでの挙動は違います。
これは個人の好みの問題だと思いますが、むしろ見るのが好きです
/**
* @Route("/edit")
* @Method({"GET"})
* @Template
*/
public function editAction()
{
$obj = new Foo;
$obj->setBaz($this->container->getParameter('default_baz'));
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
return array(
'form' => $form->createView()
);
}
それが何をするのかは明らかです。必要なフォームをインスタンス化するだけで、ユーザー入力は処理されません。
これで、2 番目のメソッドを追加して、エディションを処理するアクションを追加できます。
/**
* @Route("/edit")
* @Method({"PUT"})
* @Template("AcmeFooBundle:Bar:edit.html.twig")
*/
public function doEditAction(Request $request)
{
$obj = new Foo;
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
$form->handleRequest($request);
if ($form->isValid()) {
// Play with $obj
}
return array(
'form' => $form->createView()
);
}
簡単すぎて、アプリケーションの他の場所 (デフォルトのエディション ページではなく) で簡単に使用できます。