如何把请求转发到另一个控制器

3.4 版本
维护中的版本

虽然不是很常见,你仍然可以很容易地通过forward()方法在内部转发到另一个控制器。与对用户浏览器的重定向不同,这种方法是产生一个“内部”子请求,然后调用定义好的控制器。forward()方法返回Response对象,这个Response对象是由那个控制器返回的。

1
2
3
4
5
6
7
8
9
10
11
12
public function indexAction($name)
{
    $response = $this->forward('AppBundle:Something:fancy', array(
        'name'  => $name,
        'color' => 'green',
    ));
 
    // ... further modify the response or return it directly
    // ... 进一步调整响应,或直接返回之
 
    return $response;
}

传递到这个方法的数组,成为了后续控制器的参数。目标控制器方法,看上去可能像下面这样:

1
2
3
4
5
public function fancyAction($name, $color)
{
    // ... create and return a Response object
    // ... 创建并返回一个Response对象
}

当为路由创建控制器时,fancyAction的参数顺序不成为问题:因为匹配是通过参数名完成的。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)