Доктрина 2 Автозагрузка - PullRequest
0 голосов
/ 10 ноября 2011

Как настроить автозагрузку с 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», но я бы хотел знать, как это сделать, не привязываясь напрямую к структуре каталогов. Это возможно?

1 Ответ

1 голос
/ 10 ноября 2011

Я не знаю, как вы склеиваете 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

...