2010-09-01 164 views
5

我只是越来越认真对待教条,并使用建议的延迟加载模型。根据教程,我创建了一个教条引导文件:学说懒惰加载

<?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 = '[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

OK,所以你需要在程序的引导文件中的以下行:

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

然后自动加载按预期工作

0

在User.php模型中,需要对顶部的BaseUser.php类有一个要求。随着用户类扩展BaseUser.php

我有这个问题,并已解决它。我会感兴趣的是,如果有一些我不想做的事情,包括手动。把那一个镜头,看看它是否修复该问题,而不必要求User.php

+0

部分工作,但我仍然需要在我的doctrine_test.php文件的顶部require_once('models/User.php') – JonoB 2010-09-01 15:38:43

2

你的做法是正确的,因为教义有它自己的加载functionallity:

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

这不是递归的,所以你需要添加的文件夹说包含您的映射/托管模型。