Return 重定向正文 Laravel

Return Redirect with body in Laravel

我正在尝试对 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 等待页面来延迟重定向?

这不是 Laravel 的任务。您可以只使用 return 元页面,或使用 javascript.

// Controller
return view('redirect'); 

// View redirect.blade (Regular html page with additional meta tag)
<meta http-equiv="refresh" content="5;url=http://www.google.com/" />

您做出了一些错误的假设:

  • with 方法将事物放入会话中,以便您可以在 重定向后访问它。一个常见的用例是设置消息然后重定向用户。
  • 不要指望仅仅通过设置就可以得到魔法 body
  • 没有您所说的称为 "redirect with body" 的标准化重定向。如果你需要这样的东西,你必须实现它。

我假设您正在考虑其中一种类似于 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 被禁用,这种重定向方式将不起作用,这就是他们将 link 放入页面内容并警告用户的原因。

有些采用混合方法:

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

他们最初不使用刷新 header/meta 标记的原因是它没有在 HTTP 标准中指定。 Read more.


我强烈建议您考虑替代方案。这是 1990 年的事,一点也不方便用户使用。

作为访问者,如果我遇到一个让我等待 5 秒的网站,我就会离开。这就是为什么人们过去常常制作浏览器扩展来解决 vBulletin 的登录屏幕等待时间!

拥抱简单,只做一个常规的 HTTP 重定向。这对全人类都是最好的。