2015-07-04 2 views
3

Я использую компоненты Symfony Routing автономно, т. Е. Не с каркасом Symfony. Вот мой скелетный код, я играл с:Как кэшировать маршруты при использовании Symfony Routing как автономного?

<?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, может ли это быть легко реализовано здесь?

ответ

4

Документация 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*/); 
Смежные вопросы