Symfony2 - 如何从另一个控制器渲染视图

4
我有两个控制器,一个是主页(homepage),另一个是安全(Security)。
在主页中,我展示了一个视图,在安全中,我正在进行一些操作,其中之一就是电子邮件地址验证。
我想要的是,在电子邮件验证代码无效时,通过flash message显示主页。为此,我将需要从Security控制器中呈现HomepageController的indexAction,并将flash message作为参数传递给它。
这该如何完成?我能否从另一个控制器中呈现路由或操作?
谢谢您的帮助。
3个回答

8
我认为检查不应该在安全控制器中进行。在我看来,正确的地方是单独的验证器服务或者直接在使用电子邮件地址的实体中进行检查。
但是回答你的问题,你可以使用$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


谢谢,这正是我找到的答案。而且它完美地运行。 - Milos Cuculovic

2

我已经找到了解决方案,只需使用前向函数并指定控制器和操作名称:

return $this->forward('MerrinMainBundle:Homepage:Index', array('flash_message'=>$flash_message));

0

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接