• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于zendframework的种自动加载

php 搞代码 4年前 (2022-01-24) 26次浏览 已收录 0个评论

关于zendframework的类自动加载
目录结构

<br />zf-demo <br />  application<br />    controller<br />      IndexController.php<br />    models<br />      User.php<br />    services<br />    views<br />   Bootstrap.php<br />

其中user.php的类名是Model_User,在IndexController.php中有这么一句调用$user = new Model_U本&文来源gao@daima#com搞(%代@#码网@ser();
执行时会报错
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代码

<br /><?php<br /><br />class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {<br />	protected function _initAutoload() {<br />        $moduleLoader = new Zend_Application_Module_Autoloader(array(<br />        'namespace' => '',<br />        'basePath' => APPLICATION_PATH));<br />        <br />        /** auto load */<br />        $autoloader = Zend_Loader_Autoloader::getInstance();<br />        $autoloader->setFallbackAutoloader(true);<br />        return $moduleLoader;<br />    }<br />  <br />}<br /><br />

再次执行,就能成功加载user类了.

问题:
按我的理解,zend的自动加载机制,是把类名中的下划线替换成路径分隔符,然后根据include_path的顺序去加载类
如果是这样的话,Model_User会转换成Model/User.php来进行加载,但是目录中没有model这个文件夹,只有models,为什么也能加载成功?,_initAutoload到底做了什么?谁能解释一下?
——解决方案——————–

引用:

引用:

你可以看代码。

Application_Model_User 正常应该是这样的。你的路径不正确。

自动加载,一种是根据上面的自动转换路径。 二是根据目录搜索所有相关类。

controller里的自动加载和bootstrap里的自动加载用的可能是同一个类,你不过你指定了路径。

你是说user.php的类名应该是Applic……

可以!这是一种默认吧! 至少quick start的例子孓是这样的。 命令行 create model user 自动创建就是样的。 用的models文件夹。
——解决方案——————–
通常这种不规则的命名空间是用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)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于zendframework的种自动加载

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址