Symfony 2: HWiOauthBundle: переопределение connect_success.html.twig

Я реализовал как FOSUserBundle, так и HWIOauthBundle в своем проекте Symfony 2. В принципе, все работает нормально, но хотелось бы еще немного настроить. Обычно я использую функцию connect HWIOauthBundle для подключения учетной записи oauth к пользователю, уже подключенному к форме аутентификации (FOSUserBundle).

В случае успеха действие контроллера HWIOAuthBundle:Connect:connectService отображает шаблон ветки connect_success.html.twig. На данный момент я хотел бы переопределить этот шаблон и выполнить следующие действия:

  1. Создать флеш-сообщение
  2. Отображать флэш-сообщение на моей домашней странице

Вы можете легко добиться такого поведения с помощью 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.

У меня есть два вопроса:

  1. Для достижения моей цели, это хороший путь?
  2. Как сказать symfony, что я хочу, чтобы мой маршрут был домашней страницей?

person Cruz    schedule 18.03.2015    source источник
comment
Я думаю, что могу проверить, является ли _route нулевым. В этом случае я заставляю маршрут быть домашней страницей. Быть судимым.   -  person Cruz    schedule 19.03.2015


Ответы (1)


Как предложено в моем комментарии, вот мое решение:

В моем шаблоне домашней страницы homepage.twig.html:

{% set route = app.request.get('_route') ? app.request.get('_route') : 'homepage' %}

      <ul>
        <li><a href="{{ path(route, app.request.get( '_route_params')|merge({'_locale': 'fr'} )) }}">FR</a></li>
        <li><a href="{{ path(route, app.request.get( '_route_params')|merge({'_locale': 'en'} )) }}">EN</a></li>
      </ul> 
person Cruz    schedule 19.03.2015