找回密码
 立即注册
相关推荐换一批
  1. YD/T 1629-2007 具有路由功能的以太网交换机设备安全技术要求
  2. YD/T 1450-2006 IPv6 路由协议测试方法 —— 支持 IPv6 的边界网关协议(BGP4)
  3. YD/T 1251.2-2003 路由协议一致性测试方法 —— 开放最短路径优先协议(OSPF)
  4. YD/T 1251.1-2003 路由协议一致性测试方法 —— 中间系统到中间系统路由交换协议(IS
  5. YD/T 1521-2006 路由协议互操作性测试方法
  6. YD/T 1515-2006 IPv6 路由协议 —— 支持 IPv6 的中间系统到中间系统路由交换协议(I
  7. YD/T 1405-2005 公用电信网间电话业务路由设置的技术要求
  8. YD/T 1451-2006 IPv6 路由协议测试方法支持 IPv6 的开放最短路径优先协议(OSPF)
  9. YD/T 1453-2006 IPv6 网络设备测试方法 —— 支持 IPv6 的边缘路由器
  10. YD/T 1470-2006 IP 电话路由协议(TRIP)技术要求
  11. YD/T 1287-2003 具有路由功能的以太网交换机测试方法
  12. YD/T 1295-2003 支持 IPv6 的路由协议技术要求 —— 开放最短路径优先协议(OSPF)
  13. YD/T 1255-2003 具有路由功能的以太网交换机技术要求
  14. YD/T 1162.3-2001 在帧中继上实现 MPLS 的技术要求
  15. YD/T 1177-2002 IP 组播路由协议
  16. YD/T 2042-2009 IPv6 网络设备安全技术要求 —— 具有路由功能的以太网交换机
  17. YD/T 2043-2009 IPv6 网络设备安全测试方法 —— 具有路由功能的以太网交换机
  18. TB/T 2317-92 铁路电话交换网电话所间电路的设置和路由选择
  19. YD/T 2329.4-2011 分组通信数据网(PTDN)体系架构 第4部分:路由
  20. YD/T 1610-2007 IPv6 路由协议测试方法——支持 IPv6 的中间系统到中间系统路由交换
  21. YD/T 2815-2015 IPv6 技术要求 D理移动 IPv6 路由优化
  22. YD/T 2902-2015 具有路由交换功能的以太网交换机节能参数和测试方法
  23. YD/T 2925-2015 基于 Diameter 协议的路由D理设备技术要求
  24. GB/T 38663-2020 物联网标识体系 Ecode标识体系中间件规范
问题
我有一个这样的中间件:
  1. <?php
  2. namespace App\Http\Middleware;

  3. use App\Contracts\PermissionsHandlerInterface;
  4. use Closure;

  5. class PermissionsHanlderMiddleware {

  6.     public $permissionsHandler;

  7.     function __construct(PermissionsHandlerInterface $permissionsHandler) {
  8.         $this -> permissionsHandler = $permissionsHandler;
  9.     }

  10.     /**
  11.      * Handle an incoming request.
  12.      *
  13.      * @param  \Illuminate\Http\Request  $request
  14.      * @param  \Closure  $next
  15.      * @return mixed
  16.      */
  17.     public function handle($request, Closure $next) {
  18.         $routeAction = $request->route()->getActionName();

  19.         /*
  20.          do some operations
  21.         */

  22.         return $next($request);
  23.     }

  24. }
复制代码

但是 $request->route() 总是返回 null ,我认为这是因为路由器没有将它与请求一起发送。

注意:我将中间件添加到全局中间件中,以便在每个这样的请求之前运行

内核.php
  1. protected $middleware = [
  2.         .
  3.         .
  4.         .
  5.         'App\Http\Middleware\PermissionsHanlderMiddleware',
  6.     ];
复制代码

我想在执行它之前获取路由操作名称以执行一些权限操作。我该怎么办?

回答
如果没有发送路由器,则无法获取路由动作名称。路由器类还没有完成它的工作——所以你不能做 $router->request()——它将是空的。

如果它作为 routeMiddleware 运行,例如 $routeMiddleware - 那么你只需执行 $router->request()

您可以在路由器运行之前在中间件中获取 URI 字符串 - 如果您愿意,可以在其中执行一些逻辑: $request->segments() 。一世。通过这种方式,您可以查看 URI 段是否与特定路由匹配并运行一些代码。

编辑:

我能很快想到的一种方法是像这样组织你的所有路线:
  1. $router->group(['middleware' => 'permissionsHandler'], function() use ($router) {
  2.             // Have every single route here
  3. });
复制代码






上一篇:使用 JavaScript 从另一个页面获取内容
下一篇:使用 Kruskal 算法找到图的最小生成树