太奇怪,为什么会 Trying to get property 'headers' of non-object 错误

我和同事在学习laravel。按照本站的《Web 开发实战入门 ( Laravel 6.x ) 》在学习。

但是遇到一个怪问题。

在学习到 第八章,第三节,权限系统,的时候
8.3. 权限系统《L01 Laravel 教程 - Web 开发实战入门 ( Laravel 6.x )》

为了只允许未登陆用户访问注册和登陆页面,写了一下代码。具体见下图红框。

百思不得其解,为什么会出现 Trying to get property 'headers' of non-object 错误?

同时按照教程修改了以下文件

百思不得其解,为什么会出现 Trying to get property 'headers' of non-object 错误?

这时候,怪事出现了。我自己按照教程做,是完全没问题的。
但是同事做在这里,未登录页面访问注册和登录页面的时候,报错,错误提示

Trying to get property 'headers' of non-object

很奇怪,最后按照下面这个帖子的办法,解决了问题
blog.csdn.net/Y_X_ngu/article/deta...

app/Http/Middleware/RedirectIfAuthenticated.php

<?php
.
.
.
class RedirectIfAuthenticated
{
    .
    .
    .
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            session()->flash('info', '您已登录,无需再次操作。');
            return redirect('/');
        }
        return $next($request);
        .
        .
    }
}

只是增加了一句

return $next($request);

问题就解决了。

但我想知道为什么会出现这个错误,我们用的都是win系统。环境用的是phpstudy搭建的。php是7.3.4。mysql是8.0。

为什么我的正常。我同事的出错。
另外,上面增加的这一句代码是什么意思呢?没搞明白。

我搜索了一下,发现论坛里好几个人都遇到这个问题了。

具体见之前别人的发帖
问答:Trying to get property 'headers' of non-object

乌鸦嘴新手社区 wyz.xyz 为技术新手提供服务
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

中间件肯定要加这个啊,代表请求继续向下传递。

原本的代码本来就是带有 return $next($request);的,估计是你们把它删了,直接把教程的代码复制了过去。

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME);
        }

        return $next($request);
    }
}

教程中这些点代表是有代码的,教程让你们替换的应该是return $next($request);这一句上面的那段。

.
.
3年前 评论
shebaoting (楼主) 3年前
讨论数量: 2

中间件肯定要加这个啊,代表请求继续向下传递。

原本的代码本来就是带有 return $next($request);的,估计是你们把它删了,直接把教程的代码复制了过去。

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME);
        }

        return $next($request);
    }
}

教程中这些点代表是有代码的,教程让你们替换的应该是return $next($request);这一句上面的那段。

.
.
3年前 评论
shebaoting (楼主) 3年前

中间件在业务层面处理之后,都需要将请求的处理继续传递的。

3年前 评论
shebaoting (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!