O autloader doctrine2 com cli deve usar o AnnotationRegistry
Eu devo usar\Doctrine\Common\Annotations\AnnotationRegistry::registerFile
para acessar o registro de anotação em arquivos de entidades.
Esta parte é necessária para usar a cadeia de drivers e usar o comando orm: schema-tool: creator. mas eu não posso adicionar cada classe que eu precisava, adicionandoAnnotationRegistry::registerFile
.
Esse problema foi ver quando eu quero adicionar o Gedmo ao meu Doctrine 2.2.2.
<code>// cli-config.php // if comment this like an error will appear // \Doctrine\Common\Annotations\AnnotationRegistry::registerFile(__DIR__ . '/../library/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'); // cache $cache = new \Doctrine\Common\Cache\ArrayCache(); // annotation reader $annotationReader = new \Doctrine\Common\Annotations\AnnotationReader(); // cached annotation reader $cachedAnnotationReader = new \Doctrine\Common\Annotations\CachedReader($annotationReader, $cache); // driver chain $driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain(); // annotation driver $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($cachedAnnotationReader, array(SCHEMA_PATH)); // add entity namespaces $driverChain->addDriver($annotationDriver, 'Entity'); // configuration $config = new \Doctrine\ORM\Configuration(); $config->setMetadataCacheImpl($cache); $config->setMetadataDriverImpl($driverChain); $config->setQueryCacheImpl($cache); $config->setProxyDir(PROXY_PATH); $config->setProxyNamespace('Proxies'); $config->setAutoGenerateProxyClasses(true); // entity manager $entityManager = \Doctrine\ORM\EntityManager::create($connectionOptions, $config); // helper set $helperSet = new \Symfony\Component\Console\Helper\HelperSet(array( 'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($entityManager->getConnection()), 'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($entityManager) )); // return return $helperSet; </code>
e meu arquivo de entidade está aqui
<code>namespace Entity; use \Doctrine\Common\Collections\ArrayCollection; use \Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\Column(columnDefinition="INT unsigned NOT NULL") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string",length=32) */ protected $name; public function getId() { return $this->id; } public function setId($id) { $this->_id = $id; return $this; } public function getName() { return $this->id; } public function setName($name) { $this->_id = $name; return $this; } } </code>
o erro é:
<code> [Doctrine\Common\Annotations\AnnotationException] [Semantical Error] The annotation "@\Doctrine\ORM\Mapping\Entity" in class Entity\User does not exist, or could not be auto-loaded. </code>