我刚刚开始掌握Doctrine,并使用建议的延迟加载模型.根据教程,我创建了一个doctrine bootstrap文件:
<?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
Run Code Online (Sandbox Code Playgroud)
我的模型和基类都是由Doctrine创建的.
我还创建了一个简单的测试文件,如下所示:
<?php
require_once('doctrine_bootstrap.php');
$user = new User();
$user->email = 'test@test.com';
echo $user->email;
Run Code Online (Sandbox Code Playgroud)
但是,这会生成以下错误:
Fatal error: Class 'User' not found in E:\xampp\htdocs\apnew\services\doctrine_test.php on line 4
Run Code Online (Sandbox Code Playgroud)
但是,如果我明确要求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;
Run Code Online (Sandbox Code Playgroud)
因此,似乎Doctine没有正确自动加载模型.我错过了什么?
好的,所以您需要在引导文件中添加以下行:
spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));
Run Code Online (Sandbox Code Playgroud)
然后自动加载按预期工作
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |