Учение ZF2 + без композитора
У меня есть работающее приложение ZF2 (скелет) и я хочу интегрировать Doctrine.
Я загрузил 2 модуля (DoctrineModule и DoctrineORMModule) с github, так как не могу использовать composer (поэтому, пожалуйста, не отвечайте с помощью "get composer").
После нескольких часов попыток найти проблему, я продолжаю получать следующую ошибку:
Неустранимая ошибка: класс Doctrine\Common\Annotations\AnnotationRegistry не найден в doctrine/DoctrineModule/src/DoctrineModule/Module.php в строке 54.
Я потратил часы на поиск и отладку, но не могу найти способ исправить это. Пожалуйста, помогите мне.
3 ответа
DoctrineORMModule
явно не поддерживает автозагрузку без композитора (так как это беспорядок).
По состоянию на 0.7.*
) версия DoctrineORMModule
Требуются следующие пакеты:
- учение / общее (2.3.0)
- доктрина / дбал (2.3.2)
- Symfony / console (v2.1.7)
- учение / норма (2.3.2)
- доктрина / доктрина-модуль (0.7.*)
- доктрина / доктрина-модуль-модуль (0.7.0)
То, что вы можете сделать, это определить все автозагрузочные пространства имен в init_autoloader.php
в вашем приложении скелета (объясняя беспорядок). Код для замены является частью фабрики автозагрузчика:
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'autoregister_zf' => true,
'namespaces' => array(
'Doctrine\Common' => __DIR__ . '/vendor/doctrine/common',
'Doctrine\DBAL' => __DIR__ . '/vendor/doctrine/dbal',
'Symfony\Console' => __DIR__ . '/vendor/symfony/console',
'DoctrineModule' => __DIR__ . '/vendor/doctrine/doctrine-module',
'DoctrineORMModule' => __DIR__ . '/vendor/doctrine/doctrine-orm-module',
),
),
));
Вам придется самостоятельно настраивать различные подмодули git.
По версии 0.8.*
из модулей, зависимости будут немного увеличиваться из-за того, как doctrine/common
недавно была разделена, так что подумайте над поиском решения, чтобы начать использовать composer, иначе вы просто отложите огромные проблемы в будущем.
Это решение должно работать на данный момент.
Попробуйте отредактировать следующий метод в Module.php модуля Application:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Doctrine' => //Path where your doctrine dist resides
),
),
);
}
Нет необходимости определять конфигурацию автозагрузки для DoctrineModule
а также DoctrineORMModule
потому что это модули ZF2 и уже предоставляют конфигурацию автозагрузки.
Для аннотаций формы требуется Doctrine\Common, который содержит механизм синтаксического анализа аннотаций. Самый простой способ установить Doctrine \ Common - это если вы используете Composer; просто обновите ваш composer.json и добавьте следующую строку в раздел require:
"doctrine / common": "> = 2.1", затем запустите обновление php composer.phar, чтобы установить зависимость.
Если вы не используете Composer, посетите веб-сайт проекта Doctrine для более подробной информации об установке.