您好,欢迎访问一九零五行业门户网

关于zendframework的类自动加载,该如何处理

关于zendframework的类自动加载
目录结构
html codezf-demo application controller indexcontroller.php models user.php services views bootstrap.php
其中user.php的类名是model_user,在indexcontroller.php中有这么一句调用$user = new model_user();
执行时会报错
fatal error: class 'model_user' not found in d:\lamp\sites\zf-demo\application\controllers\indexcontroller.php on line 132
上网搜索后得到答案
在bootstarp.php中加入_initautoload方法
bootstrap.php代码
php code '', 'basepath' => application_path)); /** auto load */ $autoloader = zend_loader_autoloader::getinstance(); $autoloader->setfallbackautoloader(true); return $moduleloader; } }
再次执行,就能成功加载user类了.
问题:
按我的理解,zend的自动加载机制,是把类名中的下划线替换成路径分隔符,然后根据include_path的顺序去加载类
如果是这样的话,model_user会转换成model/user.php来进行加载,但是目录中没有model这个文件夹,只有models,为什么也能加载成功?,_initautoload到底做了什么?谁能解释一下?
------解决方案--------------------
探讨
引用:
你可以看代码。
application_model_user 正常应该是这样的。你的路径不正确。
自动加载,一种是根据上面的自动转换路径。 二是根据目录搜索所有相关类。
controller里的自动加载和bootstrap里的自动加载用的可能是同一个类,你不过你指定了路径。
你是说user.php的类名应该是applic……
------解决方案--------------------
通常这种不规则的命名空间是用zend_loader_autoloader_resource的。为了方便,框架应用本身的结构继承实现了zend_application_module_autoloader,简化了操作,看源代码就知道了
以下类的源代码
/**
 * resource loader for application module classes
 *
 * @uses zend_loader_autoloader_resource
 * @category zend
 * @package zend_application
 * @subpackage module
 * @copyright copyright (c) 2005-2011 zend technologies usa inc. (http://www.zend.com)
 * @license http://framework.zend.com/license/new-bsd new bsd license
 */
class zend_application_module_autoloader extends zend_loader_autoloader_resource
{
/**
* constructor
*
* @param array|zend_config $options
* @return void
*/
public function __construct($options)
{
parent::__construct($options);
$this->initdefaultresourcetypes();
}
/**
* initialize default resource types for module resource classes
*
* @return void
*/
public function initdefaultresourcetypes()
{
$basepath = $this->getbasepath();
$this->addresourcetypes(array(
'dbtable' => array(
'namespace' => 'model_dbtable',
'path' => 'models/dbtable',
),
'mappers' => array(
'namespace' => 'model_mapper',
'path' => 'models/mappers',
),
'form' => array(
'namespace' => 'form',
'path' => 'forms',
),
'model' => array(
'namespace' => 'model',
'path' => 'models',
),
'plugin' => array(
'namespace' => 'plugin',
'path' => 'plugins',
),
'service' => array(
'namespace' => 'service',
'path' => 'services',
其它类似信息

推荐信息