关于zendframework的种自动加载

WBOY
Freigeben: 2016-06-13 13:01:11
Original
873 Leute haben es durchsucht

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

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

其中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代码
<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 />
Nach dem Login kopieren


再次执行,就能成功加载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)
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage