我正在尝试创建动态路由,因为我创建了一个CMS,每个创建的页面都可以关联到一个路由。我正在使用来自此链接的示例 - http://php-and-symfony.matthiasnoback.nl/2012/01/symfony2-dynamically-add-routes/,一切正常,但是路由被缓存,因此除非清除缓存,否则下一个路由将无法工作。在这个阶段,是否可能仅删除路由缓存,或者是否有其他替代方案?我不想在每个页面加载时都删除整个缓存目录,因为那没有意义。以下是示例代码:
然后我为ExtraLoader制作了一个服务:
我们所需要的最后一件事情,就是在/app/config/routing.yml中增加几行额外的代码。
namespace Acme\RoutingBundle\Routing;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\Config\Loader\LoaderResolver;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
class ExtraLoader implements LoaderInterface
{
private $loaded = false;
public function load($resource, $type = null)
{
if (true === $this->loaded) {
throw new \RuntimeException('Do not add this loader twice');
}
$routes = new RouteCollection();
$pattern = '/extra';
$defaults = array(
'_controller' => 'AcmeRoutingBundle:Demo:extraRoute',
);
$route = new Route($pattern, $defaults);
$routes->add('extraRoute', $route);
return $routes;
}
public function supports($resource, $type = null)
{
return 'extra' === $type;
}
public function getResolver()
{
}
public function setResolver(LoaderResolver $resolver)
{
// irrelevant to us, since we don't need a resolver
}
}
然后我为ExtraLoader制作了一个服务:
<!-- in /src/Acme/RoutingBundle/Resources/config/services.xml -->
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="acme.routing_loader" class="Acme\RoutingBundle\Routing\ExtraLoader">
<tag name="routing.loader"></tag>
</service>
</services>
</container>
我们所需要的最后一件事情,就是在/app/config/routing.yml中增加几行额外的代码。
AcmeRoutingBundle:
resource: .
type: extra