【问题标题】:Route is incorrectly associated with redirect controller路由错误地与重定向控制器关联
【发布时间】:2011-10-27 03:23:29
【问题描述】:

我正在尝试在 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 相关联。知道是什么原因造成的吗?

【问题讨论】:

    标签: symfony


    【解决方案1】:
    ---> @Method({"POST"})
    

    不应该是这样的

    @Method("POST")
    

    ?

    【讨论】:

    • 官方文档目前将其声明为 ({"POST", "GET"}) 等,据我所见,我对其他人的工作感到更惊讶。虽然我对它比较陌生,但也许自从这个问题以来它已经改变了。
    【解决方案2】:

    我想通了。事实证明,我的客户端代码正在调用“http://todos.localhost/todos”,其中路由期待“http://todos.localhost/todos/”(有一个尾随 /)。我删除了我的 POST 请求路由中的斜杠,如下所示

    /**
     * @Route("", name="todo_create")
     * @Method({"POST"})
     */
    

    一切正常。

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

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多