Doctrig2 autloader with cli should use AnnotationRegistry

I have to use \Doctrine\Common\Annotations\AnnotationRegistry::registerFile to access the annotation registry in entity files.

This part is required to use the driver chain and use the orm: schema-tool: creator. but I cannot add every class I need by adding AnnotationRegistry::registerFile .

this problem was visible when I want to add Gedmo to my Doctrine 2.2.2.

 // 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; 

and my file object is here

 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; } } 

error:

  [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. 
+6
source share
2 answers

It seems your AnnotationRegistry not configured.

Add the following to your script:

 use Doctrine\Common\Annotations\AnnotationRegistry; AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); 

see Annotation Guide for a detailed explanation.
In short: to read PSR-0 annotations and sploot startups cannot complete the task, you must use their solution.

+8
source

Thank you, Samuel Herzog. He's great for me. I created providers using composer.json. So when I added my autoload.php, I just needed to add these sentences ...

 <?php // autoload.php generated by Composer use Doctrine\Common\Annotations\AnnotationRegistry; require_once dirname( __DIR__ ).'/vendor/composer/autoload_real.php'; $loader = ComposerAutoloaderInit0cf45a42473ebbcd4516460f93747271::getLoader(); AnnotationRegistry::registerFile( dirname( __DIR__ ).'/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php' ); return $loader; 

Just.

-2
source

Source: https://habr.com/ru/post/913849/


All Articles