Я пытаюсь настроить маршруты для моего Symfony2 одной страницы приложения, и я не уверен, как правильно это сделать без него чувства супер Hacky.Symfony маршрутизация для REST API приложения/одной страницы
Вот что мне это нужно делать и как я попытался установить его:
Когда Аутентифицированный
Любой маршрут запроса
application/json
должен ударить маршруты они были установки как обычно.Любой маршрут, который вводится без запроса
application/json
, должен загрузить контроллер, который отображает файл twig, содержащий все JS для моего одностраничного приложения.Любой статический ресурс, который не существует, и заканчивается ищет Symfony маршрут, например, [.js, .css, .jpeg, и т.д.] должен возвращать 404.
Когда НЕ Аутентифицированный
Все запрашивающий
application/json
должен вернуть 403ничего не запрашивающийдолжен вернуться на страницу входа
Вот что я пытался до сих пор:
маршруты Настройка с FOSRestBundle для каждой службы
Setup прослушивателя, возвращает HTML базового контроллера, если запрос не
application/json
if (!in_array('application/json', $request->getAcceptableContentTypes())) { $fakeRequest = $event->getRequest()->duplicate( null, null, array('_controller' => 'HvHDashboardBundle:Dashboard:index') ); $controller = $this->resolver->getController($fakeRequest); $event->setController($controller); }
Setup куча «поймать всех» маршруты фальсифицировать 404, если статический ресурс не существует.
# routing.yml # Catch any files that are meant to be their own static resource and return 404 catch_all_fail: pattern: /{uri}.{_format} defaults: { _controller: MyBundle:Dashboard:return404 } requirements: _format: js|hbs|css|jpg|gif|jpeg|png
Вопросы
- Такой подход чувствует, как массивный хака, а не то, как система маршрутизации Symfony предназначена для работы
- страница базового контроллера возвращается, даже если вы не аутентифицированы, потому что прослушиватель типа попадает перед контекстом безопасности и заставляет этот контроллер визуализировать.
Вопрос:
Как другие решить эту проблему с маршрутизацией и одной странице приложения с Symfony, где они первоначально нужно сделать HTML с веткой, а затем JS берет на себя и просит JSON?
Спасибо. Вы рекомендуете запускать api на 'api.domain.com' и обслуживать статическую логин/целевую страницу в отдельном приложении, указанном на' domain.com'? – greg
Я не знаю, зачем вам нужна статическая форма входа, если вы создаете API, но, как правило, хорошей практикой является использование разных частей системы на разных поддоменах. Мы тоже это делаем. Это также упрощает использование брандмауэра в конфиге symfony2. Например, для всего api.domain.com требуется токен аутентификации, а domain.com - анонимный токен. – tomazahlin
Возможно, я собираюсь сделать это неправильно, но мне нужно, чтобы пользователь мог войти в приложение? Это должно произойти в какой-то форме. В настоящий момент логин основан на сеансе, что не идеально, я думаю, что нужно изменить, чтобы вернуть токен? – greg