How can I cache routes when using Symfony Routing as standalone?

I am using Symfony Routing components standalone i.e. not with the Symfony framework. Here is my dice code that I am playing with:

<?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*/);

      

Is there a way to cache the routes so I don't have to run all calls add()

on every page load? (See FastRoute for example .) I believe there is caching when using the full Symfony framework, is it easy to implement here?

+3


source to share


1 answer


The Symfony Routing Component documentation provides an example of how easy it is to enable cache: All-in-One Router

Basically your example can be reworked like this:



// 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*/);

      

+4


source







All Articles