首页 > 解决方案 > 闭包对象在 Laravel 中间件中不能有属性

问题描述

我想在我的控制器的构造函数中有一个中间件来过滤非 AJAX 请求:

public function __construct()
{
    parent::__construct();

    // Return 404 if not AJAX request
    $this->middleware(function ($request, $next) {
        if (!$request->ajax()) {
            return abort(404);
        }
        return $next;
    }, ['only' => ['list', 'publish', 'unpublish', 'delete']]);
}

控制器中有一个方法:

public function list(Request $request)
{
    die('OK');
}

当我发出 AJAX 请求时,出现异常:“关闭对象不能具有属性”。如果我注释掉中间件,一切正常。

标签: laravelexceptionpropertiesclosureslaravel-middleware

解决方案


您的退货声明是错误的,您必须退货$next($request);而不是return $next;

我会亲自将您的代码更改为:

use Illuminate\Http\Response;

public function __construct()
{
    parent::__construct();

    // Return 404 if not AJAX request
    $this->middleware(function ($request, $next) {
        if (! $request->ajax()) {
            abort(Response::HTTP_NOT_FOUND);
        }

        return $next($request);
    })->only(['list', 'publish', 'unpublish', 'delete']);
}

推荐阅读