Laravel redirect::route 在页面加载之间显示一条消息

Posted

技术标签:

【中文标题】Laravel redirect::route 在页面加载之间显示一条消息【英文标题】:Laravel redirect::route is showing a message between page loads 【发布时间】:2014-07-30 23:12:56 【问题描述】:

我目前正在使用 Laravel 开发一个网络应用程序,直到最近该应用程序运行良好。我不知道是什么触发了它,但这里是我遇到的问题的摘要:

登录过去可以正常工作,因为我有一个 AccountController 可以执行此操作:

$auth = Auth::attempt(array(
    'username' => Input::get('username'),
    'password' => Input::get('password'),
    'active'=>1);
if ($auth) 
     return Redirect::route('home');


return Redirect::route('account-sign-in');

回家路线是这样的:

Route::get('/', array('as'=>'home', 'use'=>'HomeController@show'));

应用程序通常会在成功登录后立即返回主页。在我的 home.blade.php 中,我会设置一个 @if(Auth::check()),以确保一旦用户登录,主页将提供一组不同的文本。

然而,最近,我注意到在提交登录请求后,有一个中间页面显示一条消息“重定向到http://localhost.com/”。在此之前该消息不存在,并且错误开始与此消息一起显示。

我在网上查找了所有我能找到的信息,有人建议源代码存在换行/空格问题。我查看了我拥有的所有源代码,没有任何迹象表明有什么问题。

当时很绝望,我删除了 Redirect::route('home') 并用 View::make('home') 代替了它。这阻止了消息显示,我可以像往常一样再次登录。

所以我有两个问题: 1)是什么导致了这个奇怪的问题? 2) 在这种情况下使用 View::make() 与 Redirect::route() 有什么问题吗?

谢谢!

【问题讨论】:

您在生产中使用哪个 php 版本? @Creator 我正在使用 MAMP Pro 附带的 PHP 5.4.4。 【参考方案1】:

虽然没有看到更多你的设置,调试起来会很棘手,但你的路线确实有一个错误......

Route::get('/', array('as'=>'home', 'use'=>'HomeController@show'));

应该是:

Route::get('/', array('as'=>'home', 'uses'=>'HomeController@show'));

注意“使用”而不是“使用”。

此外,使用 View::make 没有任何问题,但它可能不是最好的使用逻辑,因为用户将显示不符合 url 的内容。最佳做法是按照您目前的方式重定向它们.....只要确保路由在那里,一旦重定向就可以命中。

【讨论】:

抱歉错字了,应该是“用途”。感谢您注意到这一点。为了进一步调试问题,您还需要什么其他东西?通过反复试验,我得出的结论是“将您重定向到...”消息导致错误。虽然消息本身可能是无害的,但我假设我的代码中有一些东西会触发该消息,因为它以前不存在。并且使用 View::make 而不是 Redirect::route 解决了这个问题。哈基,我知道。 你能用更多的代码库更新这个问题吗......很难猜出你是如何在没有看到代码的情况下实现你的消息的,特别是因为它可能取决于你如何过滤身份验证重定向(过滤器,手动等)。要么将其放在原始问题中,要么粘贴箱可能会更好。【参考方案2】:

我有同样的问题,对我来说问题是我在 <?php 标签之前的基本控制器中有一个空格

【讨论】:

这也是我的问题。由于我的 routes.php 文件中 <?php 标记之前的空格,我得到了“重定向到页面”,感谢您为我指明正确的方向【参考方案3】:

我遇到了同样的问题,我花了整个周末才找到真正的原因并解决了这个问题。我遇到了这个 *** 问题,感觉和我的问题一样。

我使用以下核心 php 函数进行重定向,而不是从控制器返回视图文件。

header('Location: /');

它打印了有空行的实际文件。删除此行解决了我的问题。

我的代码库中有数千个文件。我的假设是我尝试了不同的脚本来在任何文件的开头找到这样的空行,并且根据这些脚本结果没有这样的文件。我假设我的任何文件中都没有空行。但是 header('Location: /') 证明我的假设是不正确的,我在错误的行上工作。

【讨论】:

谢谢,对找到文件很有帮助 @rastemoh 听起来不错!我知道这个微小的空白带来的痛苦。【参考方案4】:

在我的应用中,问题是由转换为字符串引起的:

public function myAction(): string 
   return redirect('/');

我不得不删除 : string 以防止响应被强制转换为字符串。

【讨论】:

【参考方案5】:

我正在做一个小组项目。在生产中部署时开始出现此错误。经过长时间寻找问题后,我发现这是从合作者插入的模型(用户)返回的“回声”。消除此问题后,应用程序在重定向中恢复正常

【讨论】:

以上是关于Laravel redirect::route 在页面加载之间显示一条消息的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 无法从 redirect::route 获取参数

Laravel Redirect::route() 在 vhost 上转到错误的 url

Laravel redirect::route 在页面加载之间显示一条消息

to_route() 重复基本路径

如何在 laravel 4 mcamara 中强制链接翻译

使用 Symfony 的重定向功能时在 URL 中锚定