2012-04-22 11 views
6

का उपयोग करना चाहिए, मुझे इकाई फ़ाइलों में एनोटेशन रजिस्ट्री तक पहुंचने के लिए \Doctrine\Common\Annotations\AnnotationRegistry::registerFile का उपयोग करना होगा।cli के साथ doctrine2 autloader एनोटेशन रजिस्ट्री

इस भाग को ड्राइवर श्रृंखला का उपयोग करने और ओआरएम का उपयोग करने की आवश्यकता है: स्कीमा-टूल: निर्माता। लेकिन मैं AnnotationRegistry::registerFile जोड़कर मुझे आवश्यक प्रत्येक वर्ग को जोड़ नहीं सकता।

यह समस्या तब देखी गई जब मैं अपने डॉक्टर 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; 

और मेरी इकाई फ़ाइल इसे यहाँ

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

त्रुटि है है:

[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. 

उत्तर

8

ऐसा लगता है अपने AnnotationRegistry सेट नहीं है।

अपनी स्क्रिप्ट के लिए निम्न जोड़ें:

use Doctrine\Common\Annotations\AnnotationRegistry; 

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

विस्तृत विवरण के लिए Doctrine manual on Annotations देखते हैं।
संक्षेप में: एनोटेशन पढ़ने के लिए पीएसआर -0 और स्प्ल ऑटोलोडिंग नौकरी नहीं कर सकती है, आपको उनके समाधान का उपयोग करना होगा।

+0

यदि आप एक _Symfony 2 कंसोल अनुप्रयोग_ विकसित कर रहे हैं, तो आप इस स्निपेट को इस तरीके से समझाएं [http://stackoverflow.com/a/13461155): http://stackoverflow.com/a/ 13461155 – xsubira

-2

धन्यवाद सैमुअल हेर्ज़ोग। यह मेरे लिए सही काम करता है। मैं composer.json का उपयोग कर विक्रेताओं को उत्पन्न कर रहा था। तो जब मैंने अपना autoload.php जोड़ा तो मुझे इन वाक्यों को जोड़ने की जरूरत है ...

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

बस इसी तरह।

+4

चूंकि यह टिप्पणी से स्पष्ट है, यह एक जेनरेट की गई फ़ाइल है। आपका संपादन अगले 'संगीतकार इंस्टॉल/अपडेट' में ओवरराइट किया जा सकता है। –

संबंधित मुद्दे