问题 
我有一个这样的中间件: 
- <?php
 
 - namespace App\Http\Middleware;
 
  
- use App\Contracts\PermissionsHandlerInterface;
 
 - use Closure;
 
  
- class PermissionsHanlderMiddleware {
 
  
-     public $permissionsHandler;
 
  
-     function __construct(PermissionsHandlerInterface $permissionsHandler) {
 
 -         $this -> permissionsHandler = $permissionsHandler;
 
 -     }
 
  
-     /**
 
 -      * Handle an incoming request.
 
 -      *
 
 -      * @param  \Illuminate\Http\Request  $request
 
 -      * @param  \Closure  $next
 
 -      * @return mixed
 
 -      */
 
 -     public function handle($request, Closure $next) {
 
 -         $routeAction = $request->route()->getActionName();
 
  
-         /*
 
 -          do some operations
 
 -         */
 
  
-         return $next($request);
 
 -     }
 
  
- }
 
 
  复制代码 
但是 $request->route() 总是返回 null ,我认为这是因为路由器没有将它与请求一起发送。 
 
注意:我将中间件添加到全局中间件中,以便在每个这样的请求之前运行 
 
内核.php 
- protected $middleware = [
 
 -         .
 
 -         .
 
 -         .
 
 -         'App\Http\Middleware\PermissionsHanlderMiddleware',
 
 -     ];
 
 
  复制代码 
我想在执行它之前获取路由操作名称以执行一些权限操作。我该怎么办? 
 
回答 
如果没有发送路由器,则无法获取路由动作名称。路由器类还没有完成它的工作——所以你不能做 $router->request()——它将是空的。 
 
如果它作为 routeMiddleware 运行,例如 $routeMiddleware - 那么你只需执行 $router->request() 
 
您可以在路由器运行之前在中间件中获取 URI 字符串 - 如果您愿意,可以在其中执行一些逻辑: $request->segments() 。一世。通过这种方式,您可以查看 URI 段是否与特定路由匹配并运行一些代码。 
 
编辑: 
 
我能很快想到的一种方法是像这样组织你的所有路线: 
- $router->group(['middleware' => 'permissionsHandler'], function() use ($router) {
 
 -             // Have every single route here
 
 - });
 
 
  复制代码 
 
 
 
 |