0

Doctrine 2 と Zend でオートロードを設定して、次のディレクトリ構造にエンティティをロードする方法:

Application
-Modules
--Core
---Models
----Entities
----Repositories
--CMS
---Models
----Entities
----Repositories

{ModuleName}\Entities{EntityName} を使用してクラスをロードできるようにしたいと考えています。たとえば、「ユーザー」エンティティをロードするためにこれを実行できるようにしたいと考えています。

$em->getRepository('Core\Entities\User');

または「ページ」エンティティの場合は次のようになります。

$em->getRepository('CMS\Entities\Pages');

「CMS\Models\Entities\Pages」をロードするように設定することはできますが、ディレクトリ構造に直接マップすることなくロードする方法を知りたいです。これは可能ですか?

4

1 に答える 1

1

Zend Framework と Doctrine2 をどのように接着するかはわかりませんが、人気のある Bisna 接着剤 (非常に優れています) を使用している場合は、application.ini に複数のマッピング ディレクトリを設定できます。次の ini 設定を詳しく見てください。

resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.adapterClass          = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.mappingNamespace      = "Core\Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.mappingDirs[]         = APPLICATION_PATH "/modules/Core/Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.annotationReaderClass = "Doctrine\Common\Annotations\AnnotationReader"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.annotationReaderCache = default

resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.adapterClass          = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.mappingNamespace      = "CMS\Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.mappingDirs[]         = APPLICATION_PATH "/modules/CMS/Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.annotationReaderClass = "Doctrine\Common\Annotations\AnnotationReader"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.annotationReaderCache = default

上記のようなものは、あなたが望むものを達成するでしょう。これを完全に自動的に実行できるようにしたい場合は、Bisna\Doctrine\Container クラスにパッチを適用する必要があると思います。たとえば、定義されたモジュールを調べて、エンティティディレクトリがあるかどうかを確認し、これをドクトリンエンティティマネージャに追加します。

Bisna Bisna が何であるかを知らない場合、これは Doctrine2 と Zend Framework 1 を簡単に「接着」できる小さなライブラリです。

このビデオを見ると、Doctrine2 の統合方法を簡単に理解できるはずです。 http://www.zendcasts.com/unit-testing-doctrine-2-entities/2011/02/

ビデオで使用されている Bisna のバージョンは Doctrine 2.0 のみをサポートしており、2.1 はサポートしていないことに注意してください: https://github.com/guilhermeblanco/ZendFramework1-Doctrine2

于 2011-11-09T22:41:19.620 に答える