我正在尝试在Symfony中设计一个RESTful接口,它将通过AJAX请求调用。我一直遇到一个问题,我的POST方法路由与内置重定向控制器匹配,而不是我在下面创建的路由器:
/**
* @Route("/todos")
*/
class TodoController extends Controller
{
/**
* @Route("/", name="todos")
* @Method("GET")
*/
public function indexAction()
{
// Get action here
}
/**
* @Route("/{id}", name="todo_delete")
* @Method("DELETE")
*/
public function deleteAction($id)
{
// Delete action here
}
/**
* @Route("/", name="todo_create")
* @Method({"POST"})
*/
public function createAction()
{
return new Response("Hello!");
}
}
我的indexAction和deleteAction工作正常,但我的createAction没有。当我查看日志时,这就是我所看到的:
[2011-10-24 19:27:14] request.INFO: Matched route "todo_create" (parameters: "_controller": "Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction", "path": "/todos/", "permanent": "true", "scheme": "null", "httpPort": "80", "httpsPort": "443", "_route": "todo_create") [] []
看起来我的路线甚至没有与我创建的TodoController相关联。知道是什么导致了这个吗?
答案 0 :(得分:1)
---> @Method({"POST"})
不应该是
@Method("POST")
答案 1 :(得分:0)
我明白了。事实证明我的客户端代码调用“http://todos.localhost/todos”,其中路由期望“http://todos.localhost/todos/”(其尾随/)。我在POST请求路由中删除了斜杠,如下所示
/**
* @Route("", name="todo_create")
* @Method({"POST"})
*/
一切正常。
似乎Symfony意识到斜线丢失,将其添加到请求URL,并使用新URL执行内部重定向。但是,当Symfony执行重定向时,它不会维护请求方法(在这种情况下为POST)。相反,它正在调用我的GET控制器。