Маршрут неправильно связан с контроллером перенаправления - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь разработать интерфейс RESTful в Symfony, который будет вызываться через запросы 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 ]

1 голос
/ 27 октября 2011
---> @Method({"POST"})

Разве это не должно быть

@Method("POST")

0 голосов
/ 27 октября 2011

Я понял это. Оказывается, мой клиентский код вызывал "http://todos.localhost/todos" там, где ожидали маршруты" http://todos.localhost/todos/" (у которого есть трейлинг /). Я удалил косую черту в моем маршруте POST-запроса следующим образом

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

и все отлично работает.

Кажется, что Symfony понял, что косая черта отсутствует, добавил ее в URL-адрес запроса и выполнил внутреннее перенаправление при использовании нового URL-адреса. Однако когда Symfony выполнял перенаправление, он не поддерживал метод запроса (в данном случае POST). Вместо этого он вызывал мой контроллер GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...