Странное поведение загрузчика классов Doctrine 2 - неправильные пути к классам

У меня небольшая проблема с загрузчиком классов, добавленным в проект Doctrine 2. У меня такая простая структура каталогов:

  • config (файл начальной загрузки)
  • html (корневой каталог с шаблонами / изображениями / js и т. д.)
  • php
  • Сущности (доктрина 2 сущности)
  • Отзывы (некоторые транспортные объекты)
  • Сервисы (обработка api и бизнес-логики - например, сессионные компоненты в java)

Каждый из подкаталогов php принадлежит своему собственному пространству имен (так же, как имя каталога).
Я хочу использовать вышеупомянутый загрузчик классов для загрузки этих трех разных пакетов, поэтому мой загрузочный файл выглядит следующим образом:

$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', $lib );
$classLoader->register();

$responsesCL = new \Doctrine\Common\ClassLoader('Responses', __DIR__.'/../php');
$responsesCL->register();

$entitiesCL = new \Doctrine\Common\ClassLoader('Entities', __DIR__.'/../php');
$entitiesCL->register();

$servicesCL = new \Doctrine\Common\ClassLoader('Services', __DIR__.'/../php');
$servicesCL->register();

Жирный шрифт DIR на самом деле __ DIR __ константа php.

Теперь я имею в виду в своем пакете услуг сущности, и именно здесь начинается проблема, по какой-то причине я получаю ошибки из-за проблемы, связанной с не найденным файлом, например:

Не удалось открыть '/var/www/projects/PlatformManagement/config/../php/Services/Entities/User.php' (include_path = '.: / Usr / share / pear: / usr / share / php') в /usr/share/pear/Doctrine/Common/ClassLoader.php в строке 148

Каким-то образом в пути есть лишние «Сервисы», и, очевидно, это недопустимый путь. Я немного озадачен, почему там этот дополнительный каталог? Я проверил все пространства имен, вызовы, и они в порядке.

Мне нужна еще пара глаз, чтобы взглянуть, я предполагаю, что упускаю что-то очевидное, но не могу это заметить: |

О, это последняя версия Doctrine 2 Beta (4) и php 5.3.3 на Fedora, если это может вам помочь.

Спасибо, Грег


person Greg    schedule 06.09.2010    source источник
comment
Проблема была, когда я пытался использовать классы из пакетов. Я использовал Entities \ ClassName.class, а не \ Entities \ ClassName.class   -  person Greg    schedule 07.09.2010


Ответы (1)


Есть ли что-нибудь вроде Doctrine \ ORM \ Tools \ Setup :: registerAutoloadPEAR ()?

Автозагрузчик Doctrine может вызывать неожиданное поведение, поскольку он загружает классы на основе путей включения PHP.

см. это

В вашем случае Entities должны иметь

namespace Entities;

декларация, а не что-то еще.

И используйте объекты, как показано ниже,

use Entities\User;
new User;
person jnhwkim    schedule 24.02.2013