Я реализовал как FOSUserBundle, так и HWIOauthBundle в своем проекте Symfony 2. В принципе, все работает нормально, но хотелось бы еще немного настроить. Обычно я использую функцию connect HWIOauthBundle для подключения учетной записи oauth к пользователю, уже подключенному к форме аутентификации (FOSUserBundle).
В случае успеха действие контроллера HWIOAuthBundle:Connect:connectService отображает шаблон ветки connect_success.html.twig. На данный момент я хотел бы переопределить этот шаблон и выполнить следующие действия:
- Создать флеш-сообщение
- Отображать флэш-сообщение на моей домашней странице
Вы можете легко добиться такого поведения с помощью FOSUserBundle, так как этот пакет отправляет множество событий для подключения к контроллерам. Но с HWIOauthBundle это невозможно.
Мое решение следующее:
1/ Я переопределяю connect_success.html.twig, помещая файл с тем же именем в app/Ressources/HWIOauthBundle/views/Connect со следующим кодом:
{{ render(controller('MyUserBundle:User:HWIOAuthFlash')) }}
2/ В моем пользовательском контроллере (MyUserBundle:User) я создаю действие HWIOAuthFlashAction(), которое определяет флэш-сообщение и перенаправляет действие контроллера, отображающее домашнюю страницу (< em>MyMainBundle:Main:homepage)
public function HWIOAuthFlashAction()
{
// Here : flash message definition
return $this->forward('MyMainBundle:Main:homepage');
}
В этот момент домашняя страница отображается с флэш-сообщением. Но мне пришлось удалить две ссылки в шаблоне домашней страницы (homepage.twig.html), которые позволяют пользователю переключаться между двумя локалями.
Следующий код — это тот, который мне пришлось удалить из моего шаблона:
<ul>
<li><a href="{{ path( app.request.get('_route'), app.request.get( '_route_params')|merge({'_locale': 'fr'} )) }}">FR</a></li>
<li><a href="{{ path( app.request.get('_route'), app.request.get( '_route_params')|merge({'_locale': 'en'} )) }}">EN</a></li>
</ul>
Я понимаю, что специальная переменная _route равна нулю. И получаю следующее сообщение:
Во время рендеринга шаблона возникло исключение ("Ошибка при рендеринге "xxxxx/web/app_dev.php/connect/service/google?key=yyyyyyy" (код состояния – 500)") в HWIOAuthBundle:Connect:connect_success. .html.twig в строке 3.
У меня есть два вопроса:
- Для достижения моей цели, это хороший путь?
- Как сказать symfony, что я хочу, чтобы мой маршрут был домашней страницей?