我在Symfony 2项目中实现了FOSUserBundle和HWIOauthBundle。基本上,一切正常,但我想自定义一点点。通常,我使用HWIOauthBundle的 connect 功能,将oauth帐户连接到已与身份验证表单连接的用户(FOSUserBundle)。
如果成功,控制器操作 HWIOAuthBundle:Connect:connectService 将显示树枝模板 connect_success.html.twig 。此时,我想覆盖此模板并执行以下操作:
您可以使用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行。
我有两个问题:
答案 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>