在Laravel中使用body返回Redirect

时间:2017-09-14 13:29:58

标签: php laravel redirect laravel-5 laravel-5.1

我试图在Laravel中使用身体进行重定向。我试过这个:

return Redirect::to($log_in_url)->with('body','<html><head><title>Redirecting to your page</title></head><body>If you are not redirected within 5 seconds, please <a href="'.$log_in_url.'">cl ick here</a>.</body></html>');

我查看网络标签,我什么都看不到。

问题是如何通过在实际重定向发生之前显示HTML等待页面来实现延迟重定向?

2 个答案:

答案 0 :(得分:3)

你做了一些错误的假设:

  • with方法将事物放入会话中,以便您可以在重定向后访问。常见的用例是设置消息然后重定向用户。
  • 只要设置事物body,就不要期待魔法。
  • 没有这样的标准化重定向称为&#34;正如您所说的那样,使用正文&#34; 进行重定向。如果你需要这样的东西,你必须实现它。

我认为你在考虑其中一种类似vBulletin的重定向方式。要在Laravel环境中实现它,您需要一个中介视图,在经过一定的延迟后为您进行客户端重定向。我们将其命名为redirect.blade.php

<!doctype html>
<html lang="en">
<head>
    <title>Redirecting...</title>
    <script>
        window.setTimeout(function () {
            window.location = "{{ $url }}";
        }, 5000);
    </script>
</head>
<body>
    If you are not redirected within 5 seconds, 
    please <a href="{{ $url }}">click here</a>.
</body>
</html>

有了这个,你的控制器会将$url传递给这个中介视图并让它呈现以进行客户端重定向:

# Controller method
return view('redirect', ['url' => $log_in_url])

如果禁用JavaScript,这种重定向方式将无法正常工作,这就是为什么他们将链接放入页面内容并向用户发出警告的原因。

有些采取混合方式:

<noscript>
    <meta http-equiv="refresh" content="5;url={{ $url }}" />
</noscript>

他们首先不使用刷新标头/元标记的原因是它没有在HTTP标准中指定。 Read more

我强烈建议您研究替代方案。这是1990年,根本不是用户友好的。

作为访问者,如果我处理一个让我等待5戈德姆秒的网站,我就离开了。这就是人们过去常常使用浏览器扩展来解决vBulletin登录屏幕等待时间的原因!

拥抱简单,只需进行常规的HTTP重定向。它对全人类来说都是最好的。

答案 1 :(得分:1)

这不是Laravel的任务。您可以使用meta或使用javascript返回页面。

System.Windows.Forms.dll