Doctrine 2 Classloader странное поведение - неправильные пути к классам - PullRequest
1 голос
/ 07 сентября 2010

У меня небольшая проблема с Classloader, добавленным в проект 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();

Bold DIR на самом деле __ DIR __ php-константа.

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

Не удалось открыть '/Var/www/projects/PlatformManagement/config/../php/Services/Entities/User.php' (Include_path = ': / USR / доли / груша: / USR / доли / PHP') в / USR / доли / груша / Doctrine / Общие / ClassLoader.php на линии 148

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

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

О, это последняя бета-версия Doctrine 2 (4) и php 5.3.3 на fedora, если это поможет.

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

1 Ответ

0 голосов
/ 24 февраля 2013

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

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

this

В вашем случае сущности должны иметь объявление

namespace Entities;

, а не что-либо еще.

И использовать сущности, как показано ниже,

use Entities\User;
new User;
...