路由与重定向控制器错误关联

时间:2011-10-27 03:23:29

标签: symfony

我正在尝试在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相关联。知道是什么导致了这个吗?

2 个答案:

答案 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控制器。