Symfony 2:HWiOauthBundle:覆盖 connect_success.html.twig

Symfony 2 : HWiOauthBundle : Overriding connect_success.html.twig

我在我的 Symfony 2 项目中实现了 FOSUserBundle 和 HWIOauthBundle。基本上,一切正常,但我想定制更多。通常我使用 HWIOauthBundle 的 connect 功能将 oauth 帐户连接到已经连接到身份验证表单 (FOSUserBundle) 的用户。

如果成功,控制器操作 HWIOAuthBundle:Connect:connectService 显示 twig 模板 connect_success.html.twig。此时,我想覆盖此模板并执行以下操作:

  1. 创建即显消息
  2. 在我的主页上显示即显信息

您可以使用 FOSUserBundle 轻松获得此行为,因为此捆绑包会分派许多事件以挂接到控制器。但是使用 HWIOauthBundle 这是不可能的。

我的解决方案如下:

1/ 我通过在 app/Ressources/HWIOauthBundle/views/Connect 中放置相同的命名文件来覆盖 connect_success.html.twig,代码如下:

{{ render(controller('MyUserBundle:User:HWIOAuthFlash')) }}

2/ 在我的用户控制器 (MyUserBundle:User) 中,我创建了一个动作 HWIOAuthFlashAction() 来定义一个闪现消息和转发到显示主页的控制器操作(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 为空。我收到以下消息:

An exception has been thrown during the rendering of a template ("Error when rendering "xxxxx/web/app_dev.php/connect/service/google?key=yyyyyyy" (Status code is 500).") in HWIOAuthBundle:Connect:connect_success.html.twig at line 3.

我有两个问题:

  1. 实现我的目标,是不是好方法?
  2. 如何对 symfony 说我希望我的路由是 主页 ?

正如我在评论中提出的那样,这是我的解决方案:

在我的主页模板中 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>