向zend框架站点添加应用程序/服务后类加载错误


class loading error after adding application/services to zend framework site

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

我得到的是这样的结构:

application/
  models/
  modules/
  services/
    Test.php

我尝试调用类Test.php:

class Service_Test{
}
$test = new Service_Test()

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

(include_path包含一个目录列表,为了保护隐私,我删除了它)。

我认为服务会像模型一样被自动发现。有人知道我如何使Zend框架找到服务文件夹吗?


我也试过了:

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

PHP致命错误:Class 'Service_Test' not found

在你的bootstrap

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

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

感谢大家的帮助。我终于弄明白是怎么回事了。我正在工作的网站有一个非典型的设置。它没有扩展任何Zend框架引导类,也没有调用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)给其他人。看看其他人对这种做法的看法会很有趣。好还是坏?无论如何,这就是我解决问题的方法。