2010-09-01 161 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'); 
... 

這不是遞歸的,所以你需要添加的文件夾說包含您的映射/託管模型。