需要路由组的ajax请求

时间:2017-10-14 23:25:45

标签: php ajax laravel laravel-5 routes

我有一个看起来如下的路线组:

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

2 个答案:

答案 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,因为它可能是未经授权的请求。