Учение о ленивой нагрузке - PullRequest
       2

Учение о ленивой нагрузке

5 голосов
/ 01 сентября 2010

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

<?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

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

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

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

$user = new User();
$user->email = 'test@test.com';
echo $user->email;

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

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

Однако, если мне явно требуются файлы BaseUser.php и User.php, он работает без ошибок

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

$user = new User();
$user->email = 'test@test.com';
echo $user->email;

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

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

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

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

И тогда автозагрузка работает как положено

2 голосов
/ 02 сентября 2010

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

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

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

0 голосов
/ 01 сентября 2010

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

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

...