从 Laravel 5 中的中间件获取当前路由操作名称

2023-12-26

我有一个这样的中间件:

<?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);
    }

}

but $request->route()总是返回null,我认为这是因为路由器尚未随请求一起调度。

Note:我将中间件添加到Kernal.php在每个请求之前运行的全局中间件如下

protected $middleware = [
        .
        .
        .
        'App\Http\Middleware\PermissionsHanlderMiddleware',
    ];

我想在执行之前获取路由操作名称$next($request)进行一些权限操作。我怎样才能做到这一点 ?


如果路由器尚未调度,则无法获取路由操作名称。路由器类还没有完成它的工作 - 所以你不能这样做$router->request()- 它只会是空的。

如果它作为routeMiddleware运行$routeMiddleware- 那么你就可以做$router->request()

您可以在路由器运行之前在中间件中获取 URI 字符串 - 如果您愿意的话,还可以在那里执行一些逻辑:$request->segments()。也就是说,您可以查看 URI 段是否与特定路由匹配并运行一些代码。

Edit:

我能很快想到的一种方法是将所有路线包装在一个组中,如下所示:

$router->group(['middleware' => 'permissionsHandler'], function() use ($router) {
            // Have every single route here
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Laravel 5 中的中间件获取当前路由操作名称 的相关文章

随机推荐