我在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 回答
正如我的评论中提出的,这是我的解决方案:
在我的主页模板homepage.twig.html中: