我是zend框架的新手所以也许这个问题很愚蠢......
我有一个默认的层次结构
站点
| --bootstrap.php
| --application
| --models
| - Item.php
| - ModelAbstract.php
| --...
在Item.php里面有
<?php
//TODO: trying to remove this require...
require_once('ModelAbstract.php');
class CF_Model_Flower extends CF_Model_Abstract
{
...
在'ModelAbstract.php'里面有
<?php
class CF_Model_Abstract
{
...
我的应用程序Bootstrap.php看起来像
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'CF',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}
...
如果我删除了Item.php中的'require_once',我会得到
Fatal error: Class 'CF_Model_Abstract' not found in /Mysite/application/models/Item.php on line 6
为什么?如果没有这个require_once,我怎么能使用自动加载?
事实上,将'ModelAbstract.php'重命名为'Abstract.php'是有效的。有人能解释我为什么吗?
THX
答案 0 :(得分:0)
我不熟悉Zend_Application_Module_Autoloader
等。但如果它们像早期的ZF自动加载机制那样工作,自动加载器将在以下位置寻找类CF_Model_Abstract:
CF/Model/Abstract.php
或者可能使用此命名空间/ basePath配置:
models/Model/Abstract.php
或:
models/CF/Model/Abstract.php
但可能不在:
models/ModelAbstract.php
换句话说,下划线代表子目录。
答案 1 :(得分:0)
尝试在命名空间中指定_。
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'CF_',
'basePath' => dirname(__FILE__),
));
答案 2 :(得分:0)
将以下内容放入引导程序文件中:
protected function _initAutoLoad()
{
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH,
'namespace' => 'CF',
));
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model')
->addResourceType('mapper', 'models/mappers', 'Model_Mapper')
->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
return $loader;
}
这将为您加载模型,表单,dbtables和映射器。希望这可以解决问题。