Учение 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 Требуются следующие пакеты:

То, что вы можете сделать, это определить все автозагрузочные пространства имен в 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 для более подробной информации об установке.

Другие вопросы по тегам