我有两个控制器,主页和安全。
在主页中,我正在显示一个视图,在安全性中,我正在做一些事情,其中之一是电子邮件地址验证。
我想要的是,当电子邮件验证码无效时,显示主页并显示一条消息。为此,我必须通过将 Flash 消息作为参数提供给 Security 控制器来呈现 HomepageController 的 indexAction。
如何才能做到这一点?我可以从另一个控制器渲染路线或动作吗?
先感谢您。
我有两个控制器,主页和安全。
在主页中,我正在显示一个视图,在安全性中,我正在做一些事情,其中之一是电子邮件地址验证。
我想要的是,当电子邮件验证码无效时,显示主页并显示一条消息。为此,我必须通过将 Flash 消息作为参数提供给 Security 控制器来呈现 HomepageController 的 indexAction。
如何才能做到这一点?我可以从另一个控制器渲染路线或动作吗?
先感谢您。
我认为不应该在安全控制器中进行检查。我认为正确的位置是使用电子邮件地址的实体中的单独验证器服务或权利。
但是对于您的问题,您可以使用 $this->forward() 方法调用另一个控制器的操作:
public function indexAction($name)
{
$response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
'name' => $name,
'color' => 'green',
));
return $response;
}
该示例来自 symfony2 文档:http ://symfony.com/doc/2.0/book/controller.html#forwarding
我找到了解决方案,只需通过指定控制器和操作名称来使用转发功能:
return $this->forward('MerrinMainBundle:Homepage:Index', array('flash_message'=>$flash_message));
redirectToRoute :只是对当前 symfony 版本的回顾(截至 2016/11/25 使用 v2.3+)
public function genericAction(Request $request)
{
if ($this->evalSomething())
{
$request->getSession()->getFlashBag()
->add('warning', 'some.flash.message');
$response = $this->redirectToRoute('app_index', [
'flash_message' => $request->getSession()->getFlashBag(),
]);
} else {
//... other logic
}
return $response;
}