带有 2 个参数的 symfony 重定向

Posted

技术标签:

【中文标题】带有 2 个参数的 symfony 重定向【英文标题】:symfony redirect with 2 parameters 【发布时间】:2010-12-02 14:09:40 【问题描述】:

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

这段代码:

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

网址中的结果:

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

【问题讨论】:

【参考方案1】:

嗯,这很正常,“重定向”重定向到绝对 URL。你可以这样做:

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

【讨论】:

这有帮助。除了它生成像“http://.../input/new/year/2009/month/10”这样的url 如果你定义了一个路由,你可以用它的名字替换'default',如果需要的话,用路由的参数来改变第二个参数。 如果定义了路由,其实可以使用$this->redirectToRoute('routename', ['param1' => 'value', ['param2' => 'value'])【参考方案2】:

在当前支持的 Symfony 版本(2.7+)it's even easier(另外,您还可以选择在末尾添加状态码):

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

【讨论】:

【参考方案3】:

也可以使用redirect,指定路由名称和参数数组:

$this->redirect('route_name', array('year' => $year, 'month' => $month));

(在 Symfony 1.4 上测试)

【讨论】:

【参考方案4】:

我认为这不是正常的 symfony 行为。你定义了一些路由规则吗?

你也试过这个吗:

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

【讨论】:

【参考方案5】:

奇怪的东西。有没有

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

为你工作?

【讨论】:

是的,这也有效。谢谢,但 xarch 的解决方案更漂亮 =)【参考方案6】:
$this->redirect('input/new/year/' . $year . '/month/' . $month);

【讨论】:

这破坏了symfony的内部路由系统 它实际上没有。 symfony 的智能内部路由引擎正是这个重定向起作用的原因!但感谢您的反对;) 当你这样做时,你必须在调整相应的路由规则时更改所有链接/重定向

以上是关于带有 2 个参数的 symfony 重定向的主要内容,如果未能解决你的问题,请参考以下文章

laravel 4重定向到带有2个参数的路由

Symfony 安全返回 401 响应而不是重定向

Symfony:重定向进程的输出

Symfony2 安全不同的防火墙不能正确重定向到登录

如果我没有登录,Symfony 防火墙不会重定向我

Symfony在apache服务器上重定向太多