Symfony 路由与重定向控制器不正确关联

Symfony 路由与重定向控制器不正确关联,symfony,Symfony,我试图在Symfony中设计一个RESTful接口,它将通过AJAX请求调用。我遇到了一个问题,我的POST方法路由与内置重定向控制器匹配,而不是与我在下面创建的重定向控制器匹配: /** * @Route("/todos") */ class TodoController extends Controller { /** * @Route("/", name="todos") * @Method("GET") */ public functio

我试图在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关联。你知道这是什么原因吗

---> @Method({"POST"})
难道不是吗

@Method("POST")
?

难道不是吗

@Method("POST")

我想出来了。原来我的客户端代码正在调用“http://todos.localhost/todos“路线预期的位置”http://todos.localhost/todos/“(后面有一个/)。我删除了我的POST请求路径中的斜杠,如下所示

/**
 * @Route("", name="todo_create")
 * @Method({"POST"})
 */
一切正常


似乎Symfony意识到斜杠丢失了,将其添加到请求url中,并使用新url执行内部重定向。然而,当Symfony执行重定向时,它没有维护request方法(在本例中为POST)。相反,它调用了我的GET控制器。

我找到了答案。原来我的客户端代码正在调用“http://todos.localhost/todos“路线预期的位置”http://todos.localhost/todos/“(后面有一个/)。我删除了我的POST请求路径中的斜杠,如下所示

/**
 * @Route("", name="todo_create")
 * @Method({"POST"})
 */
一切正常


似乎Symfony意识到斜杠丢失了,将其添加到请求url中,并使用新url执行内部重定向。然而,当Symfony执行重定向时,它没有维护request方法(在本例中为POST)。相反,它调用的是我的GET控制器。

官方文档目前将其声明为({“POST”,“GET”})等,就我所见,我更惊讶于其他人的工作。虽然我对它比较新,但可能是因为这个问题而有所改变。官方文件目前将其表述为({“POST”,“GET”})等,就我所见,我更惊讶于其他人的工作。虽然我对它比较新,但自从这个问题以来,它可能已经改变了。