Gedmo のドクトリン拡張を機能させるための例を理解するのに苦労しています。さまざまな構成ビットをすべて完全に理解しているわけではありませんが、関連する部分は次のとおりです。
$cache = new \Doctrine\Common\Cache\ArrayCache;
$yamlDriver = new Doctrine\ORM\Mapping\Driver\YamlDriver(array(APPLICATION_PATH . $options['mappingDir']));
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
$config->setMetadataDriverImpl($yamlDriver);
$em = \Doctrine\ORM\EntityManager::create($options['connection'], $config);
それが私の現在のセットアップであり、機能しています。YamlDriver は、Yaml 構成ファイルを指しています。私のエンティティは にありAPPLICATION_PATH . '/entities/'
ます。エンティティを名前空間に配置する方法がわかりませんでした。これが問題の一部である可能性がありAPPLICATION_PATH . '/entities/'
ます。インクルード パスに追加しただけです。
私がする必要があると思うことは次のとおりです (これは doctrineextensions デモから取得したものです):
$cache = new Doctrine\Common\Cache\ArrayCache;
// standard annotation reader
$annotationReader = new Doctrine\Common\Annotations\AnnotationReader;
$cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader(
$annotationReader, // use reader
$cache // and a cache driver
);
// create a driver chain for metadata reading
$driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain();
// load superclass metadata mapping only, into driver chain
// also registers Gedmo annotations.NOTE: you can personalize it
Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
$driverChain, // our metadata driver chain, to hook into
$cachedAnnotationReader // our cached annotation reader
);
// Replaced their entity annotations with my Yaml driver
$yamlDriver = new Doctrine\ORM\Mapping\Driver\YamlDriver(array(APPLICATION_PATH . $options['mappingDir']));
// register annotation driver for our application Entity namespace
$driverChain->addDriver($yamlDriver , 'Entity');
そして、 と同様に追加$driverChain
しsetMetadataDriverImpl()
ます。
ただし、それは機能していません。おそらく、特定のドライバーを指す名前空間にエンティティがないと driverChain を使用できないためでしょうか?
次に、イベント マネージャーを機能させる必要があります。
$evm = new Doctrine\Common\EventManager();
$sortableListener = new Gedmo\Sortable\SortableListener;
$sortableListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($sortableListener);
しかし、それは機能しません。$evm をエンティティ マネージャーに渡すと、エラーが発生します。
致命的なエラー: 157 行目の D:\Jeremy\htdocs\umr\library\Gedmo\Mapping\ExtensionMetadataFactory.php の未定義メソッド Doctrine\ORM\Mapping\Driver\YamlDriver::getLocator() の呼び出し
誰かがこれに光を当てることができれば、私は最も感謝しています! メタデータ ドライバーがチェーン化された最初の部分は、 に記載されているクラスを使用している場合にのみ必要であると思いますがregisterAbstractMappingIntoDriverChainORM()
、私はそうではありません。 -- 残りの部分は別の日に取り組みます。