【发布时间】:2015-03-18 18:55:44
【问题描述】:
我在我的 Symfony 2 项目中实现了 FOSUserBundle 和 HWIOauthBundle。基本上,一切正常,但我想定制一点。通常,我使用 HWIOauthBundle 的 connect 功能将 oauth 帐户连接到已与身份验证表单 (FOSUserBundle) 连接的用户。
如果成功,控制器操作 HWIOAuthBundle:Connect:connectService 会显示 twig 模板 connect_success.html.twig。此时,我想覆盖此模板并执行以下操作:
- 创建快讯
- 在我的主页上显示 Flash 消息
您可以使用 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 为空。我收到以下消息:
在渲染模板期间引发了异常 ("渲染时出错 “xxxxx/web/app_dev.php/connect/service/google?key=yyyyyyy”(状态 代码是 500).") 在 HWIOAuthBundle:Connect:connect_success.html.twig 中 第 3 行。
我有两个问题:
- 实现我的目标,是不是好办法?
- 如何对 symfony 说我希望我的路由成为 主页?
【问题讨论】:
-
我想我可以测试一下 _route 是否为空。在这种情况下,我强制路由为 homepage。待试。
标签: symfony fosuserbundle hwioauthbundle