Symfony2 RedirectResponse消息

时间:2016-02-11 13:46:46

标签: php symfony redirect

我在重定向到其他网站时遇到问题。当我重定向时,我看到消息:“重定向到......”。为什么?真的我不能没有问题地重定向到网站吗?

我明白了: Is it possible to change the default redirect message in Symfony?

我的代码:

  /**
   * @Route("/project/{url}/{link}/", name="page_show")
   * @Template("base.html.twig")
   */
  public function pageAction($link, $url) {

    if ($link == '...') {
      $redrect = new RedirectResponse('http://...');
      return $redrect;
    }

也许我是白痴而且看不到解决方案......

6 个答案:

答案 0 :(得分:1)

我不确定您是否可以将@Template("base.html.twig")与重定向响应结合使用。尝试删除@template注释,并在操作结束时执行base.html.twig渲染:

/**
 * @Route("/project/{url}/{link}/", name="page_show")
 */
public function pageAction($link, $url) {

    if ($link == '...') {
      $redrect = new RedirectResponse('http://...');
      return $redrect;
    }

    // Maybe add the proper path "BundleName:DirectoryName:base.html.twig"
    return $this->render('base.html.twig');
}

答案 1 :(得分:1)

仔细阅读

  

首先,将模板301.html.twig创建到Acme / FooBundle / Resources / views / Error /中,并附上您想要的内容。

下面: Is it possible to change the default redirect message in Symfony?

答案 2 :(得分:1)

重定向到另一个网站:

public function pageAction(Request $request)
{
    return $this->redirect('https://google.com');
}

答案 3 :(得分:1)

如果在开发环境中发生这种情况,则您已将intercept_redirects配置选项设置为true。按照http://symfony.com/doc/current/reference/configuration/web_profiler.html

中的说明将其设置为false

如果在生产环境中发生这种情况,原因是RedirectResponse有一些硬编码的HTML内容来执行重定向。请参阅以下代码行:https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/HttpFoundation/RedirectResponse.php#L86-L96

在1秒钟内,您会看到重定向到... 消息。可以更改此消息,但这需要您付出很多努力。这里解释了一切:Is it possible to change the default redirect message in Symfony?

更新:在this discussion in the Symfony repository中有更多相关信息。重定向应该是即时的,因为它应该使用响应头中提供的信息。如果发生错误,则使用硬编码的HTML内容。因此,您可能需要调试响应没有获得正确的重定向标头的原因。

答案 4 :(得分:0)

您的问题的答案在Symfony官方书中。

http://symfony.com/doc/current/book/controller.html#redirecting

public function pageAction()
{
   return $this->redirect('http://stackoverflow.com');
}

答案 5 :(得分:0)

除非你真的热衷于使用Symfony重定向' RedirectResponse类,你可以随时继续使用旧的PHP:

function redirectUrl($url, $replace=true, $status=302){
    header("Location : ".$url, $replace, $status);
    exit();
}

// usage example
redirectUrl("http://www.google.com");

这不仅像魅力一样,而且与Symfony的内部功能相比非常快,因为只有一个呼叫+死亡/退出。

详细了解PHP的header功能。

但是,由于此方法与框架完全分离,因此Symfony分析器无法拦截您的重定向,因此开发人员工具栏不会注意到/显示此重定向。这取决于你想要什么。