<?php
namespace WAM\Bundle\CoreBundle;
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use WAM\Bundle\CoreBundle\DependencyInjection\Compiler\InjectTaggedServicesPass;
use WAM\Bundle\CoreBundle\DependencyInjection\Compiler\WAMCoreCompilerPass;
class WAMCoreBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new WAMCoreCompilerPass());
$container->addCompilerPass(
new InjectTaggedServicesPass(
'wam.core.preview_handler.chain',
'wam.preview_handler',
'addHandler'
)
);
$this->buildOrmCompilerPass($container);
}
/**
* @param ContainerBuilder $container
*/
protected function buildOrmCompilerPass(ContainerBuilder $container)
{
foreach ($this->extension->getEntitiesOverrides() as $configKey => $namespace) {
$container->addCompilerPass(
new DoctrineOrmMappingsPass(
$this->buildORMDriver(),
[$namespace],
['wam.core.model_manager_name', 'orm'],
"wam.core.use_default.{$configKey}"
)
);
}
}
/**
* @return Definition
*/
protected function buildORMDriver()
{
$arguments = [[realpath(__DIR__.'/Resources/config/doctrine-model')], '.orm.xml'];
$locator = new Definition('Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator', $arguments);
return new Definition('Doctrine\ORM\Mapping\Driver\XmlDriver', [$locator]);
}
}