Symfony如何处理控制器的POST方法?例如,ASP.NET 中的这段代码可以以不同的方式为控制器使用完全相同的名称:
public ActionResult Create()
{
return View();
}
// POST: Objects/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create()
{
//Code here that only runs on POST method of a form
return View();
}
我见过这样的东西:
public function createAction()
{
return $this->render('formPage.html.twig');
}
/**
* @Method({"POST"})
*/
public function createAction()
{
//Some code...
return new Response('Added item with id: ' . $item->getId() . 'to database');
}
后者是否可能并与前者相似?是否有必要使用这样的注释,或者也可以将其添加到路由中,如果是这样,我应该制作不同的路由名称或其他东西吗?
movie_create:
path: /movies/create
defaults: { _controller: AppBundle:Movie:create }
您可以定义路由将接受的方法,根据您的示例或通过 routeting.yml 中的注释;
my_route:
path: /foo/bar/{id}
defaults: { _controller: AppBundle:Fubar:foo }
methods: [POST]
这将只接受开机自检。
你不能定义两个同名的方法,这是 PHP 的一个限制。 在您的情况下,您可以有一个路由来显示表单,另一个路由来处理请求。
> Symfony2中的控制器是类,在这些类中,你不能重新定义具有相同名称的方法。
恐怕您需要将控制器一分为二:
class ViewController extends Controller {
public function createAction()
{
return $this->render('formPage.html.twig');
}
}
class CreateController extends Controller {
/**
* @Method({"POST"})
*/
public function createAction()
{
//Some code...
return new Response('Added item with id: ' . $item->getId() . 'to database');
}
}
或者更简单的解决方案,只需在路由中重命名方法:
movie_view:
path: /movies/view
defaults: { _controller: AppBundle:Movie:view }
movie_create:
path: /movies/create
defaults: { _controller: AppBundle:Movie:create }
requirements:
_method: POST