Правильно ли обрабатывает Symfony2 URL-адрес restful и должен ли я использовать URL-адрес restful? - PullRequest
5 голосов
/ 13 февраля 2012

Я пытаюсь понять, каков наилучший способ создания моих URL. Итак, вот что я сделал до сих пор:

account_index:
    pattern:  /Accounts/
    defaults: { _controller: "CoreBundle:Account:index" }
    requirements: { _method: get }

account_create:
    pattern:  /Accounts/
    defaults: { _controller: "CoreBundle:Account:create" }
    requirements: { _method: post }

account_read:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:show" }
    requirements: { _method: get }

account_update:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:update" }
    requirements: { _method: put }

account_delete:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:delete" }
    requirements: { _method: delete }

После тестирования того, что я сделал, я понял, что обновление и удаление не работают (всегда вызывает account_read) ... После поиска проблемы я обнаружил, что методы PUT и DELETE поддерживаются не во всех браузерах. .. и может быть отброшен в будущем.

Затем я прочитал, что Ruby on rails поддерживает эти два метода во всех браузерах, выполняя некоторые действия.

Так что мне интересно, может ли Symfony2 обрабатывать PUT и DELETE, как это делает ruby? А ТАКЖЕ Должен ли я использовать релакс-URL вообще?

Ответы [ 3 ]

12 голосов
/ 13 февраля 2012

Да, symfony2 определенно совместим с RESTful.

Я не знаю, для рельсов, но Symfony2 обрабатывает обнаружение методов HTTP, используя различные способы:

  • сначала получите REQUEST_METHOD от php
  • тогда, если и только метод == POST, получает метод из заголовка X-HTTP-METHOD-OVERRIDE (откат к _method параметру запроса)

Почему он делаетэта проверка POST заключается в том, что браузеры не могут отправлять ничего, кроме запросов GET или POST.

Отличие от rails и / или symfony1 в том, что нет помощника для генерации ссылок или форм с помощью соответствующих методов.,Вы должны сгенерировать действительный запрос к вашему приложению.

PS: Что касается маршрутизации, вы должны написать свои требования к _method в UPPERCASE.

3 голосов
/ 13 февраля 2012

Если вы планируете внедрить сервисы RESTful, вы можете взглянуть на RestBundle . У них уже есть довольно хорошие соглашения об именах URL, с которыми вы, возможно, согласитесь, и множество других вещей, которые упростят процесс разработки.

И да, Symfony2 может обрабатывать запросы PUT и DELETE.

1 голос
/ 18 июля 2013

Суть не в том, что Symfony может делать или не делать, а в том, как "Restful url" справляется с текущими доступными браузерами ...

Некоторые браузеры не позволяют использовать некоторые методы HTTP (например, put или delete), поэтому да, хорошая реализация будет использовать GET, POST, PUT, DELETE и PATCH, но у некоторых пользователей будут проблемы:)

Как всегда ... браузеры ...

...