我有这样的中间件:
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
但$request->route()总是返回null,我认为是因为路由器尚未随请求一起调度.
注意:我将中间件添加到Kernal.php全局中间件,以便在每个请求之前运行,如下所示
protected $middleware = [
.
.
.
'App\Http\Middleware\PermissionsHanlderMiddleware',
];
Run Code Online (Sandbox Code Playgroud)
我想在执行$next($request)某些权限操作之前获取路由操作名称.我怎样才能做到这一点 ?
如果尚未分派路由器,则无法获取路由操作名称.路由器类还没有完成它的东西 - 所以你做不到$router->request()- 它只是为空.
如果它作为routeMiddleware运行$routeMiddleware- 那么你可以这样做 $router->request()
你可以在路由器运行之前在中间件中获取URI字符串 - 如果你愿意,可以在那里做一些逻辑:$request->segments().也就是说,你可以看到URI段是否与特定路线匹配并运行一些代码.
编辑:
我可以快速想到的一种方法是将所有路由包装在这样的组中:
$router->group(['middleware' => 'permissionsHandler'], function() use ($router) {
// Have every single route here
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4786 次 |
| 最近记录: |