52ky 发表于 2022-5-6 13:45:06

从 laravel 5 中获取当前路由动作名称

问题
我有一个这样的中间件:
<?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
});




页: [1]
查看完整版本: 从 laravel 5 中获取当前路由动作名称