laravel - 闭包对象在 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 请求时,出现异常:“关闭对象不能具有属性”。如果我注释掉中间件,一切正常。
解决方案
您的退货声明是错误的,您必须退货$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']);
}
推荐阅读
- jquery - 使用jQuery检测浏览器
- mysql - 如何在 sequelize 中将查询结果作为数组获取?
- node.js - 使用 mongoexport 时连接 sasl 对话错误(身份验证错误)
- r - 在 geom_point 图中错误地绘制反应点
- ionic-framework - 波纹效果在滚动时触发
- flutter - 如何从 dart 文件中获取 Js 文件中的设备令牌?
- html - 无法在 Angular 9 中使用 *ngFor 在选择列表中显示选项
- vba - 我需要帮助在 word 中的两个标题之间复制内容 - vba
- c# - 在 BAPI 中设置表参数失败
- vue.js - Vuelidate、v-for 和子组件化