独立使用 Symfony Routing 时如何缓存路由?
How to cache routes when using Symfony Routing as a standalone?
我正在独立使用 Symfony 路由组件,即不与 Symfony 框架一起使用。这是我正在玩的基本代码:
<?php
$router = new Symfony\Component\Routing\RouteCollection();
$router->add('name', new Symfony\Component\Routing\Route(/*uri*/));
// more routes added here
$context = new Symfony\Component\Routing\RequestContext();
$context->setMethod(/*method*/);
$matcher = new Symfony\Component\Routing\Matcher\UrlMatcher($router, $context);
$result = $matcher->match(/*requested path*/);
有没有办法缓存路由,这样我就不需要在每次加载页面时都运行所有add()
调用? (参见示例 FastRoute。)我相信使用完整的 Symfony 框架时存在缓存,这里可以轻松实现吗?
Symfony 路由组件文档包含一个如何轻松启用缓存的示例:The all-in-one Router
基本上您的示例可以按如下方式重新设计:
// RouteProvider.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('name', new Route(/*uri*/));
// more routes added here
return $collection;
// Router.php
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\RequestContext
use Symfony\Component\Routing\Loader\PhpFileLoader;
$context = new RequestContext();
$context->setMethod(/*method*/);
$locator = new FileLocator(array(__DIR__));
$router = new Router(
new PhpFileLoader($locator),
'RouteProvider.php',
array('cache_dir' => __DIR__.'/cache'), // must be writeable
$context
);
$result = $router->match(/*requested path*/);
我正在独立使用 Symfony 路由组件,即不与 Symfony 框架一起使用。这是我正在玩的基本代码:
<?php
$router = new Symfony\Component\Routing\RouteCollection();
$router->add('name', new Symfony\Component\Routing\Route(/*uri*/));
// more routes added here
$context = new Symfony\Component\Routing\RequestContext();
$context->setMethod(/*method*/);
$matcher = new Symfony\Component\Routing\Matcher\UrlMatcher($router, $context);
$result = $matcher->match(/*requested path*/);
有没有办法缓存路由,这样我就不需要在每次加载页面时都运行所有add()
调用? (参见示例 FastRoute。)我相信使用完整的 Symfony 框架时存在缓存,这里可以轻松实现吗?
Symfony 路由组件文档包含一个如何轻松启用缓存的示例:The all-in-one Router
基本上您的示例可以按如下方式重新设计:
// RouteProvider.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('name', new Route(/*uri*/));
// more routes added here
return $collection;
// Router.php
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\RequestContext
use Symfony\Component\Routing\Loader\PhpFileLoader;
$context = new RequestContext();
$context->setMethod(/*method*/);
$locator = new FileLocator(array(__DIR__));
$router = new Router(
new PhpFileLoader($locator),
'RouteProvider.php',
array('cache_dir' => __DIR__.'/cache'), // must be writeable
$context
);
$result = $router->match(/*requested path*/);