【问题标题】:Require ajax request for route group需要路由组的ajax请求
【发布时间】:2018-03-26 19:00:00
【问题描述】:

我的路由组如下所示:

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

【问题讨论】:

    标签: php ajax laravel laravel-5 routes


    【解决方案1】:

    执行此操作的正确方法是在每个中间件句柄中返回 next 变量。上面abort_unless 的方法实际上在 Laravel 6 中不起作用。没有在以前的版本上测试过。

    if(!$request->ajax()) {
        abort(404);
    } else {
        return $next($request);
    }
    

    更好的是返回 401 而不是 404,因为它可能是未经授权的请求。

    【讨论】:

      【解决方案2】:

      您可以通过使用中间件并使用它来检查请求是否是 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 文件中注册中间件,然后将其应用到路由组或控制器构造函数中。

      【讨论】:

      • 整洁。非常感谢詹姆斯。很遗憾,由于 15 名声望障碍,无法投票。
      • 你去 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多