闭包对象不能在 Laravel 中间件中具有属性

Closure object cannot have properties in Laravel middleware

我想在我的控制器的构造函数中有一个中间件来过滤非 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 请求时,我得到了异常:“闭包对象不能有属性”。 如果我注释掉中间件,一切正常。

你的return说法是错误的,你必须return$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']);
}