代码之家  ›  专栏  ›  技术社区  ›  thomas.g

Zend框架自动加载模型扩展类

  •  0
  • thomas.g  · 技术社区  · 15 年前

    我刚接触Zend框架,所以这个问题可能很愚蠢。

    我有一个默认的层次结构

    网站
    |--引导程序.php
    ——应用
    ε-模型
    γ-ITM.PHP
    |--模型摘要.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
    

    为什么?如果没有这个要求,我怎么能用自动加载来生活呢?

    实际上,将“modelabstract.php”重命名为“abstract.php”是可行的。有人能解释一下为什么吗?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  0
  •   Decent Dabbler    15 年前

    我不熟悉 Zend_Application_Module_Autoloader 等等。但是,如果它们与早期的ZF自动加载机制类似,自动加载程序将在以下位置查找类cf_model_abstract:

    CF/Model/Abstract.php

    或者使用以下命名空间/基路径配置:

    models/Model/Abstract.php

    或:

    models/CF/Model/Abstract.php

    但可能不在:

    models/ModelAbstract.php

    换句话说,下划线代表子目录。

        2
  •  0
  •   linead    15 年前

    尝试在命名空间中指定u。

     $autoloader = new Zend_Application_Module_Autoloader(array(
                'namespace' => 'CF_',
                'basePath'  => dirname(__FILE__),
     ));
    
        3
  •  0
  •   levivanzele    14 年前

    将以下内容放入引导文件:

    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和映射器。希望这能成功。