gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:20:24 26 4
gpt4 key购买 nike

我有一个这样的中间件:

<?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 ,我认为这是因为路由器尚未随请求一起发送。

注:我将我的中间件添加到 Kernal.php在每个请求之前运行的全局中间件如下
protected $middleware = [
.
.
.
'App\Http\Middleware\PermissionsHanlderMiddleware',
];

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

最佳答案

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

如果它作为路由中间件运行 $routeMiddleware - 那么你可以做 $router->request()
您可以在路由器运行之前在中间件中获取 URI 字符串 - 如果您愿意,可以在那里执行一些逻辑:$request->segments() .即这样您就可以查看 URI 段是否与特定路由匹配并运行一些代码。

编辑:

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

$router->group(['middleware' => 'permissionsHandler'], function() use ($router) {
// Have every single route here
});

关于laravel - 从laravel 5 中的中间件获取当前路由操作名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com