我正在使用Doctrine2和Symfony2驗證器組件的CodeIgniter項目。導入註釋時遇到問題
我所有的Doctrine2實體use Doctrine\ORM\Mapping
和實體管理器都能識別它們。我的實體註釋看起來像這樣:
/**
* @Entity(repositoryClass = "UserRepository")
* @Table(name = "user")
* @HasLifecycleCallbacks()
*/
在這一點上,我能夠堅持實體沒有任何麻煩。當我嘗試使用Symfony2 Validator組件時,第一個問題就出現了。當我嘗試驗證User
對象,我得到這個錯誤:
[Semantical Error] The annotation "@Entity" in class Entity\User was never imported. Did you maybe forget to add a "use" statement for this annotation?
唯一的「修復」這個問題是通過use Doctrine\Mapping\Entity
,但我必須這樣做,對於正在使用我的實體每註釋(表,列,ManyToOne等)。我試圖弄清楚爲什麼我需要明確地註釋use
每個註釋類,而不是自動識別它們(不應該use Doctrine\ORM\Mapping
授予我訪問該名稱空間內所有類的權限?)。
所以,我然後試着use Doctrine\ORM\Mapping as ORM
和ORM\
預填所有我的註釋。例如:@ORM\Entity()
。 Symfony2驗證器停止抱怨,但現在Doctrine2抱怨Class Entity\User is not a valid entity or mapped super class.
我不知道爲什麼這種方法適用於Validator,而不是Doctrine2。如果我運行控制檯命令doctrine:orm:info
,我的User
實體無法識別。
因爲這是一個CodeIgniter應用程序,所以我自動加載Symfony2和Doctrine2庫。我的自動加載代碼如下:
# Symfony2 ClassLoader component
require_once __DIR__ . '/application/libraries/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
$loader = new \Symfony\Component\ClassLoader\UniversalClassLoader();
$loader->register();
$loader->registerNamespace('Symfony', __DIR__ . '/application/libraries/symfony/src');
$loader->registerNamespace('Doctrine', __DIR__ . '/application/libraries/doctrine/lib');
# Doctrine2
require_once __DIR__ . '/application/libraries/doctrine/lib/Doctrine/Common/Annotations/AnnotationRegistry.php';
use Doctrine\Common\Annotations\AnnotationRegistry;
AnnotationRegistry::registerLoader(function($class) use ($loader) {
$loader->loadClass($class);
$classExists = class_exists($class, false);
return $classExists;
});
AnnotationRegistry::registerFile(__DIR__ . '/application/libraries/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
如果我有ORM\
或不前言一切,我不在乎,我只想找到一種解決方案,該Symfony2的驗證和Doctrine2將兩者與工作。有任何想法嗎?
那麼它沒有'ORM \'工作的情況下,所以我們編碼每個實體的方式,現在突然停止工作,沒有原因,我們留下了維護噩夢? – Brandon 2017-01-23 19:41:02