movisio/lazy-router

Nette RouteList,具有通过前缀按需加载路由的功能

v0.11 2022-08-24 08:33 UTC

This package is auto-updated.

Last update: 2024-09-24 14:06:15 UTC


README

Nette RouteList,具有按需加载路由的功能。
特别适用于拥有许多(数百个?)路由的情况,这可能会减慢您的系统,并且您不需要在每个请求中加载所有这些路由。

例如,当您的应用程序有更多独立的模块,并且每个模块都有自己的路由时,它们可以被分离并按模块进行懒加载。

请注意,此路由器是专门为数百个静态路由的大型API创建的,不应用于常规路由 <module>/<presenter>/<action>

用法

默认情况下,LazyRouteList 的行为与普通 RouteList 完全一样。对于懒加载功能,请使用 setLazyCachedRoutes 方法。它只有一个参数:用于将路由加载到缓存的回调函数。回调函数的返回值应该是路由器的数组。该函数还接受参数 $dependencies,就像 nette Cache::load 回调一样。

$router = new LazyRouteList($cache);
$router->setLazyCachedRoutes(function (&$dependencies) : array {
    
    // .... read routes from files or whatever ...
    $routes = [
        new \Nette\Routing\Route('/api/v1/route/to/resource', 'Module:ApiPresenter:action')    
    ];
    
    // optional cache dependency for automatic cache invalidation and routes reloading
    $dependencies[\Nette\Caching\Cache::FILES] = ['path/to/file', 'path/to/another/file'];
    
    return $routes;
});

路由将根据路径的静态部分(不带参数)以及演示者进行分组,并将被缓存。

在匹配时,路由器将只加载具有匹配静态路径部分的路线。
在创建链接时,只从缓存中加载与目标演示者匹配的路由。