Symfony带有2个参数的重定向

39

如何通过传递2个或更多参数来重定向到另一个操作?

这段代码:

$this->redirect('input/new?year=' . $year . '&month=' . $month);

URL中的结果:

http://.../input?year=2009&month=9

6个回答

58

那是正常的,“redirect”重定向到一个绝对 URL。你可以这样做:

$this->redirect($this->generateUrl('default', array('module' => 'input',
'action' => 'new', 'year' => $year, 'month' => $month)));

1
除了它会生成类似于"http://.../input/new/year/2009/month/10"的URL之外,它非常有用。 - kipelovets
3
如果您定义了一个路由,可以用其名称替换“default”,并在需要时更改路由参数的第二个参数。 - xarch
4
如果您已经定义了一个路由,您可以使用$this->redirectToRoute('routename', ['param1' => 'value', ['param2' => 'value']) - Quentin S.

11

在当前支持的Symfony版本(2.7+)中,重定向甚至更加容易了(而且,你还可以选择在末尾添加状态码):

return $this->redirectToRoute(
    'default',
    array('year' => $year, 'month' => $month),
    Response::HTTP_MOVED_PERMANENTLY // = 301
);

5
您也可以使用重定向,指定路由名称和参数数组:
$this->redirect('route_name', array('year' => $year, 'month' => $month));

(在Symfony 1.4上测试过)

3

我认为这不是Symfony的正常行为。您是否定义了某些路由规则?

您也尝试过这个吗:

$this->redirect('module/action?'.http_build_query($paramsArray));

1

奇怪的事情。这是什么意思?

$this->redirect('@default?module=input&action=new&year=' . $year . '&month=' . $month);

适合你工作吗?


2
是的,那也可以。谢谢,但xarch的解决方案更漂亮 =) - kipelovets

-3
$this->redirect('input/new/year/' . $year . '/month/' . $month);

3
这会破坏Symfony的内部路由系统。 - jochil
1
它实际上并没有。Symfony的智能内部路由引擎正是这个重定向起作用的原因!但还是谢谢你的负评 ;) - Mohammad
6
这种做法需要在调整相应的路由规则时更改所有链接/重定向。 - jochil

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