我有一个看起来如下的路线组:
web.php
Route::group( ['middleware' => 'auth', 'prefix' => 'ajax'],
function() {
Route::post( 'checkTheName', function( Request $request ) {
return response()->json( 'Something important' );
} );
}
);
Laravel是否可以检查传入请求是否是组中所有路由的AJAX请求(如果不是,则抛出例如404状态)?我觉得在每个儿童路线上检查它都是毫无意义的。这就是为什么我想要在路由组范围内进行全局检查。
使用Laravel 5.5
答案 0 :(得分:3)
您可以通过使用中间件并使用它来检查请求是否是Ajax请求来实现此目的。
您可以使用php artisan make:middleware AjaxMiddleware
创建新的中间件。
在句柄功能中你可能会做这样的事情:
public function handle($request, Closure $next)
{
abort_unless($request->ajax(), 404);
}
这利用了abort_unless()
帮助器,它将条件语句作为第一个参数,然后在第二个参数中返回状态代码。
您也可以选择执行abort_unless($request->ajax(), 401)
这是未经授权的请求。
然后,您只需在Kernel.php
文件中注册中间件,然后将其应用于路由组或控制器构造函数。
答案 1 :(得分:1)
执行此操作的正确方法是在每个中间件句柄中返回next
变量。上面使用abort_unless
的方法实际上在Laravel 6中不起作用。未经先前版本的测试。
if(!$request->ajax()) {
abort(404);
} else {
return $next($request);
}
更好的是返回401而不是404,因为它可能是未经授权的请求。