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

时间:2015-03-18 18:55:44

标签: symfony fosuserbundle hwioauthbundle

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

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

  1. 创建Flash消息
  2. 在我的主页上显示Flash消息
  3. 您可以使用FOSUserBundle轻松获取此行为,因为此捆绑包会分派许多事件以挂钩到控制器中。但是使用HWIOauthBundle这是不可能的。

    我的解决方案如下:

    1 /我通过使用以下代码将相同的命名文件放在 app / Ressources / HWIOauthBundle / views / Connect 中来覆盖 connect_success.html.twig

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

    2 /在我的用户控制器( MyUserBundle:User )中,我创建了一个动作 HWIOAuthFlashAction(),它定义了一条flash消息并转发到显示他的控制器动作主页( MyMainBundle:主要:主页

        public function HWIOAuthFlashAction()
        {
        // Here : flash message definition
    
        return $this->forward('MyMainBundle:Main:homepage');
       }
    

    此时将显示带有Flash消息的主页。但我必须删除主页模板中的两个链接( 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 是null。我收到以下消息:

      

    在渲染模板期间抛出了异常   (“渲染时出错   “xxxxx / web / app_dev.php / connect / service / google?key = yyyyyyy”(状态   代码是500)。“)在HWIOAuthBundle中:Connect:connect_success.html.twig at   第3行。

    我有两个问题:

    1. 为了实现我的目标,这是好方法吗?
    2. 如何对symfony说我希望我的路线是主页

1 个答案:

答案 0 :(得分:0)

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

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