2010-09-01 2 views
5

Я просто разбираюсь с Доктриной и использую предложенную ленивую загрузку моделей. Согласно учебники, я создал доктрину начальной загрузки файла:Doctrine lazy loading

<?php 
require_once(dirname(__FILE__) . '/libs/doctrine/lib/Doctrine.php'); 
spl_autoload_register(array('Doctrine', 'autoload')); 
$manager = Doctrine_Manager::getInstance(); 
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE); 
Doctrine_Core::loadModels(array(dirname(__FILE__) . '/models/generated', dirname(__FILE__) . '/models')); //this line should apparently cause the Base classes to be loaded beforehand 

Мои модели и базовые классы были все созданное доктриной.

Я также создал простой тестовый файл следующим образом:

<?php 
require_once('doctrine_bootstrap.php'); 

$user = new User(); 
$user->email = '[email protected]'; 
echo $user->email; 

Однако это порождает следующую ошибку:

Fatal error: Class 'User' not found in E:\xampp\htdocs\apnew\services\doctrine_test.php on line 4 

Однако, если я явно требует BaseUser.php и пользователя .php, тогда он отлично работает без ошибок

<?php 
require_once('doctrine_bootstrap.php'); 
require_once('models/generated/BaseUser.php'); 
require_once('models/User.php'); 

$user = new User(); 
$user->email = '[email protected]'; 
echo $user->email; 

Итак, кажется, что Doctine не является au для правильной загрузки моделей. Что мне не хватает?

ответ

2

ОК, так что вам нужна следующая строка в загрузочном файле:

spl_autoload_register(array('Doctrine_Core', 'modelsAutoload')); 

, а затем автоматически погрузочные работы, как ожидается,

0

В модели User.php необходимо, чтобы класс BaseUser.php находился в верхней части. Поскольку пользовательский класс расширяет BaseUser.php

У меня была эта проблема, и это ее решило. Мне было бы интересно, если есть что-то, чего я не вижу, чтобы не нужно было это делать вручную. Дайте, что выстрел и увидеть, если он устраняет проблему без необходимости требовать User.php

+0

Это частично работает, но мне все еще нужно require_once ('models/User.php') в верхней части моего файла doctrine_test.php – JonoB

2

Ваш подход является правильным, поскольку доктрина имеет собственную загрузку: функциональность,

Doctrine::loadModels('models'); 
Doctrine::loadModels('models/generated'); 
Doctrine::loadModels('models/tables'); 
... 

Это не является рекурсивным, так что вы должны добавить папки, содержат ваши сопоставленные/управляемые модели.