【问题标题】:class loading error after adding application/services to zend framework site将应用程序/服务添加到 zend 框架站点后类加载错误
【发布时间】:2011-10-11 19:09:32
【问题描述】:

我正在尝试向 zend 框架中的应用程序文件夹添加一个新文件夹,但找不到我在新文件夹中创建的类。

我拥有的是这个结构:

application/
  models/
  modules/
  services/
    Test.php

我尝试调用 Test.php 类:

class Service_Test{

}

$test = new Service_Test()

这会导致错误: PHP 警告:include_once():在第 146 行的 library/Zend/Loader.php 中打开 'Service/Test.php' 以包含 (include_path='...') 失败。

(include_path 包含目录列表,出于隐私考虑,我将其删除)。

我认为自动找到服务的方式与自动找到模型的方式相同。有谁知道如何让 Zend 框架找到 Services 文件夹?


我也试过了:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => ROOT_PATH . '/application',
        'namespace' => 'Service',
    ));

PHP 致命错误:找不到类“Service_Test”

【问题讨论】:

  • 你的文件夹是services吗?你的班级是Service_Test;应该是Services_Test,还是目录列表中有错字?
  • 我认为服务是 zend 的标准。我在 zend 框架参考中找到了该文件夹:framework.zend.com/manual/en/project-structure.project.html。以防万一尝试了“服务”,但没有运气。

标签: php zend-framework autoload directory-structure


【解决方案1】:

在您的引导程序中

protected function _initNamespace(){
  Zend_Loader_Autoloader::getInstance()->registerNamespace('Service_');

} 然后你调用任何以'Service_'开头的类

【讨论】:

    【解决方案2】:

    感谢大家的帮助。我终于弄清楚发生了什么。我正在处理的网站有一个非典型的设置。它没有扩展任何 Zend Framework 引导类,也没有调用 Zend_Application。自动加载类的方式是使用:

    set_include_path(ROOT_PATH . '/application/models'.PATH_SEPARATOR .
                 ROOT_PATH . '/library'.PATH_SEPARATOR .
             get_include_path());
    
    require_once('Zend/Loader.php');
    @Zend_Loader::registerAutoload();
    

    我改成:

    set_include_path(ROOT_PATH . '/application/models'.PATH_SEPARATOR .
                 ROOT_PATH . '/library'.PATH_SEPARATOR .
             get_include_path());
    
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->setFallbackAutoloader(true);
    $resources = new Zend_Loader_Autoloader_Resource(array(
              'namespace' => '',
              'basePath'  => ROOT_PATH . '/application/',
          ));
    $resources->addResourceTypes(array(
              'service' => array(
                  'path'      => 'services',
                  'namespace' => 'Service',
              )));
    

    从技术上讲,我不必添加资源,但如果我没有,并且只是依靠将 /application/services 放入包含路径中,那么我将无法在我的类前面加上“Service_”。

    我不确定我是否会向其他人推荐这种设置(没有 Bootstrap 类扩展或使用 Zend_Application)。看看其他人对这种做法的看法会很有趣。是好是坏?无论如何,这就是我解决问题的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      相关资源
      最近更新 更多