首页 文章

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

提问于
浏览
0

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

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

  • 创建一条flash消息

  • 在我的主页上显示Flash消息

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

我的解决方案如下:

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

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

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

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中:连接:第3行的connect_success.html.twig .

我有两个问题:

  • 为了实现我的目标,这是好方法吗?

  • 如何对symfony说我希望我的路线成为主页?

1 回答

  • 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>
    

相关问题