由於Symfony 3.3的文件app/autoload.php消失了。但我用它來註冊一個自定義映射類型,如here所述。Symfony 3.3 + Doctrine/MongoDB:註冊自定義映射類型
我現在應用程序/ autoload.php看起來是這樣的:
use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
use Doctrine\ODM\MongoDB\Types\Type;
/** @var ClassLoader $loader */
$loader = require __DIR__.'/../vendor/autoload.php';
Type::addType("MyCustomType", "Com\\MyBundle\\Db\\MyCustomTypeClass");
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
AnnotationDriver::registerAnnotationClasses();
return $loader;
如前所述here,AnnotationDriver::registerAnnotationClasses();
並不需要被調用的Symfony 3.3下去了。但我不知道,哪裏放
Type::addType("MyCustomType", "Com\\MyBundle\\Db\\MyCustomTypeClass");
我試圖把它變成延伸Bundle
MyBundle
類的boot()
方法。但是當我應用更改後第一次執行我的單元測試時,我得到了InvalidArgumentException: Invalid type specified "MyCustomType".
。當我再次執行它們時,我得到了Doctrine\ODM\MongoDB\Mapping\MappingException: Type MyCustomType already exists.
。
提到我用的原則問題 - ** ** ODM(MongoDB的),而不是教義,ORM。您鏈接到Doctrine-ORM手冊。您所顯示的配置僅適用於Doctrine-ORM。 Doctrine-ODM的配置以:'doctrine_mongodb:'開頭。不幸的是,它沒有'dbal:'配置選項。 – Spunc
你是絕對正確的;我的錯!你有沒有嘗試在你的'MyBundle'類文件中的'__construct()'方法中加載它? –
我試着將'Type :: addType'代碼放入'__construct()'而不是'boot()'中,但它具有相同的效果。 – Spunc