diff --git a/CmfRoutingBundle.php b/CmfRoutingBundle.php index 5d8e3279..2ad34291 100644 --- a/CmfRoutingBundle.php +++ b/CmfRoutingBundle.php @@ -2,12 +2,13 @@ namespace Symfony\Cmf\Bundle\RoutingBundle; +use Doctrine\Bundle\PHPCRBundle\DependencyInjection\Compiler\DoctrinePhpcrMappingsPass; +use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Cmf\Bundle\RoutingBundle\DependencyInjection\Compiler\ChainRouterPass; use Symfony\Cmf\Bundle\RoutingBundle\DependencyInjection\Compiler\RouteEnhancerPass; use Symfony\Cmf\Bundle\RoutingBundle\DependencyInjection\Compiler\SetRouterPass; -use Symfony\Cmf\Bundle\RoutingBundle\DependencyInjection\Compiler\RoutePass; /** * Bundle class @@ -23,6 +24,27 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new ChainRouterPass()); $container->addCompilerPass(new RouteEnhancerPass()); $container->addCompilerPass(new SetRouterPass()); - $container->addCompilerPass(new RoutePass()); + $container->addCompilerPass($this->buildBasePhpcrCompilerPass()); + } + + /** + * Build the compiler pass for the symfony core routing component. The + * factory method uses the SymfonyFileLocator which will look at the + * namespace and thus not work here. + * + * @return DoctrinePhpcrMappingsPass + */ + private function buildBasePhpcrCompilerPass() + { + $arguments = array(array(realpath(__DIR__ . '/Resources/config/doctrine')), '.phpcr.xml'); + $locator = new Definition('Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator', $arguments); + $driver = new Definition('Doctrine\ODM\PHPCR\Mapping\Driver\XmlDriver', array($locator)); + + return new DoctrinePhpcrMappingsPass( + $driver, + array('Symfony\Component\Routing'), + array('cmf_routing.manager_name'), + false // TODO: once we have config for orm or phpcr-odm, configure the enabled parameter + ); } } diff --git a/DependencyInjection/CmfRoutingExtension.php b/DependencyInjection/CmfRoutingExtension.php index 713b725a..5b9c219b 100644 --- a/DependencyInjection/CmfRoutingExtension.php +++ b/DependencyInjection/CmfRoutingExtension.php @@ -110,11 +110,6 @@ private function setupDynamicRouter(array $config, ContainerBuilder $container, $contentRepository->replaceArgument(0, new Reference($config['manager_registry'])); $container->setParameter($this->getAlias() . '.manager_name', $config['manager_name']); - // @todo - remove these lines when Compiler/RoutePass no longer depends on the manager_registry factory. - $managerRegistry = $container->getDefinition($this->getAlias() . '.manager_registry'); - $managerRegistry->setFactoryService(new Reference($config['manager_registry'])); - $managerRegistry->replaceArgument(0, $config['manager_name']); - $dynamic = $container->getDefinition($this->getAlias().'.dynamic_router'); // if any mappings are defined, set the respective route enhancer diff --git a/DependencyInjection/Compiler/RoutePass.php b/DependencyInjection/Compiler/RoutePass.php deleted file mode 100644 index 2c5cc050..00000000 --- a/DependencyInjection/Compiler/RoutePass.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ -class RoutePass implements CompilerPassInterface -{ - /** - * @param ContainerBuilder $container - */ - public function process(ContainerBuilder $container) - { - if (!$container->hasDefinition('cmf_routing.manager_registry')) { - return; - } - - $managerRegistry = $container->getDefinition('cmf_routing.manager_registry'); - $managerName = $managerRegistry->getArgument(0); - $chainDriverDefService = sprintf('doctrine_phpcr.odm.%s_metadata_driver', $managerName); - if (!$container->hasDefinition($chainDriverDefService)) { - return; - } - - $mappingService = 'cmf_routing.phpcr_mapping.core_route'; - $arguments = array('Symfony\Component\Routing' => realpath(__DIR__.'/../../Resources/config/doctrine')); - $mappingDriverDef = new Definition('Doctrine\ODM\PHPCR\Mapping\Driver\XmlDriver', $arguments); - $container->setDefinition($mappingService, $mappingDriverDef); - - $chainDriverDef = $container->getDefinition($chainDriverDefService); - $chainDriverDef->addMethodCall('addDriver', array(new Reference($mappingService), 'Symfony\Component\Routing')); - } -} diff --git a/Resources/config/cmf_routing.xml b/Resources/config/cmf_routing.xml index 63a49693..091a1825 100644 --- a/Resources/config/cmf_routing.xml +++ b/Resources/config/cmf_routing.xml @@ -83,14 +83,6 @@ - - - - - %cmf_routing.route_entity_class% diff --git a/Resources/config/doctrine/RedirectRoute.phpcr.xml b/Resources/config/doctrine/RedirectRoute.phpcr.xml index 3d65e2c8..f8a29837 100644 --- a/Resources/config/doctrine/RedirectRoute.phpcr.xml +++ b/Resources/config/doctrine/RedirectRoute.phpcr.xml @@ -1,13 +1,17 @@ - + - - - - - + + + + + diff --git a/Resources/config/doctrine/Route.phpcr.xml b/Resources/config/doctrine/Route.phpcr.xml index 25d20c10..b48cf277 100644 --- a/Resources/config/doctrine/Route.phpcr.xml +++ b/Resources/config/doctrine/Route.phpcr.xml @@ -1,17 +1,22 @@ - + + - - - + - - - - - + + + + + + + diff --git a/Resources/config/doctrine/Symfony.Component.Routing.Route.dcm.xml b/Resources/config/doctrine/Symfony.Component.Routing.Route.dcm.xml deleted file mode 100644 index f804808f..00000000 --- a/Resources/config/doctrine/Symfony.Component.Routing.Route.dcm.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/Resources/config/doctrine/Symfony.Component.Routing.Route.phpcr.xml b/Resources/config/doctrine/Symfony.Component.Routing.Route.phpcr.xml new file mode 100644 index 00000000..58278261 --- /dev/null +++ b/Resources/config/doctrine/Symfony.Component.Routing.Route.phpcr.xml @@ -0,0 +1,16 @@ + + + + + + + + + + +