首先,根据规范有几种方法可用,不仅是 GET 和 POST
我认为这不是安全原因,更多的是尊重标准(例如REST 方法)。
我个人对几种行为使用不同的方法。对我来说,有看到版本和应用版本的动作。
这是单个 URL 的两种不同行为。即使最后的响应不会改变,控制器级别的行为也是不同的。
我认为这是个人喜好问题,我喜欢看
/**
* @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()
);
}
很清楚它的作用。它只是实例化您需要的表单,不处理用户输入。
现在,您可以通过添加第二种方法来添加您的操作来处理版本
/**
* @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()
);
}
也很容易,并且可以在您的应用程序的其他地方轻松使用(而不是在默认版本页面中)