[DoctrineBundle] Tries to auto-generate the missing proxy files on the

autoloader
This commit is contained in:
Grégoire Passault 2011-08-16 11:51:41 +02:00
parent a1810d6881
commit e866a678d2

View File

@ -42,12 +42,37 @@ class DoctrineBundle extends Bundle
if ($this->container->hasParameter('doctrine.orm.proxy_namespace')) {
$namespace = $this->container->getParameter('doctrine.orm.proxy_namespace');
$dir = $this->container->getParameter('doctrine.orm.proxy_dir');
$doctrine = $this->container->get('doctrine');
spl_autoload_register(function($class) use ($namespace, $dir) {
spl_autoload_register(function($class) use ($namespace, $dir, $doctrine) {
if (0 === strpos($class, $namespace)) {
$className = substr($class, strlen($namespace) +1);
$file = $dir.DIRECTORY_SEPARATOR.$className.'.php';
if (!file_exists($file)) {
// Tries to auto-generate the proxy file
if (preg_match('/^(.+)\\\\([a-z0-9_]+)Proxy$/i', $class, $matches)) {
$className = $matches[2];
foreach ($doctrine->getEntityManagers() as $em) {
$em = $doctrine->getEntityManager();
if ($em->getConfiguration()->getAutoGenerateProxyClasses()) {
$classes = $em->getMetadataFactory()->getAllMetadata();
foreach ($classes as $class)
{
$name = str_replace('\\', '', $class->name);
if ($name == $className) {
$em->getProxyFactory()->generateProxyClasses(array($class));
}
}
}
}
}
}
if (!file_exists($file)) {
throw new \RuntimeException(sprintf('The proxy file "%s" does not exist. If you still have objects serialized in the session, you need to clear the session manually.', $file));
}