Tôi phải sử dụng \Doctrine\Common\Annotations\AnnotationRegistry::registerFile
để truy cập đăng ký chú thích trong tệp thực thể.doctrine2 autloader với cli phải sử dụng AnnotationRegistry
Phần này là bắt buộc để sử dụng chuỗi trình điều khiển và sử dụng orm: schema-tool: creator. nhưng tôi không thể thêm mỗi lớp tôi cần bằng cách thêm AnnotationRegistry::registerFile
.
vấn đề này được nhìn thấy khi tôi muốn thêm Gedmo vào Tài liệu của tôi 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;
và tập thực thể của tôi nó ở đây
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;
}
}
lỗi là:
[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.
Nếu bạn đang phát triển một ứng dụng giao diện điều khiển _Symfony 2, bạn nên đặt đoạn mã này theo cách [được giải thích trong câu trả lời này] (http://stackoverflow.com/a/13461155): http://stackoverflow.com/a/ 13461155 – xsubira