首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原理懒惰加载

原理懒惰加载
EN

Stack Overflow用户
提问于 2010-09-01 21:07:57
回答 3查看 1.3K关注 0票数 5

我刚刚开始掌握Doctrine,并使用建议的延迟加载模型。根据教程,我已经创建了一个原理引导文件:

代码语言:javascript
复制
<?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创建的。

我还创建了一个简单的测试文件,如下所示:

代码语言:javascript
复制
<?php
require_once('doctrine_bootstrap.php');

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

但是,这会生成以下错误:

代码语言:javascript
复制
Fatal error: Class 'User' not found in E:\xampp\htdocs\apnew\services\doctrine_test.php on line 4

但是,如果我显式地需要BaseUser.php和User.php文件,那么它可以正常工作,不会出现任何错误

代码语言:javascript
复制
<?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没有正确地自动加载模型。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-01 23:43:41

好的,所以您需要在引导程序文件中使用以下行:

代码语言:javascript
复制
spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));

然后自动加载就会按预期工作。

票数 2
EN

Stack Overflow用户

发布于 2010-09-02 18:11:01

你的方法是正确的,因为Doctrine有它自己的加载功能:

代码语言:javascript
复制
Doctrine::loadModels('models'); 
Doctrine::loadModels('models/generated'); 
Doctrine::loadModels('models/tables'); 
...

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

票数 2
EN

Stack Overflow用户

发布于 2010-09-01 21:14:27

在User.php模型中,需要对顶部的BaseUser.php类进行要求。因为user类扩展了BaseUser.php

我遇到过这个问题,现在已经解决了。我会感兴趣的是,如果我错过了一些东西,而不是必须这样做,包括手动。试一试,看看它是否在不需要User.php的情况下解决了问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3618307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档