0

ZF 让我很瘦。如果不先使用它作为资源添加它,我无法让 AutoLoader 的一个实例工作

require_once ('Zend\Loader\Autoloader.php');
Zend_Loader_Autoloader::getInstance();

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
           'basePath'  => APPLICATION_PATH . '/helpers',
           'namespace' => 'Application_',
       ));

$resourceLoader->addResourceType('form', 'forms/', 'Form')
           ->addResourceType('functions', 'functions/', 'Functions')
           ->addResourceType('menus', 'menus/', 'Menu')
           ->addResourceType('acls', 'acls/', 'Acls');

现在我正在尝试加载一个插件,但是当我知道文件存在时 ZF 会抱怨路径。

// located in application/controllers/plugins
    require('controllers\plugins\Acl.php');
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Application_Controller_Plugin_Acl($acl));

为什么我必须使用 require 这是 IIS7 的事情吗?我认为 AutoLoader 应该负责处理所有事情。

4

1 回答 1

2

我不认为这是一个 IIS 问题。我认为这是对Zend_Loader_Autoloader_Resource.

您正在告诉自动加载器 viaZend_Loader_Autoloader_Resource添加命名空间Application,并且它位于 basePath 中APPLICATION_PATH . '/helpers'

如果我尝试从这里:

new Application_Menu_Primary();

ZF 应该在APPLICATION_PATH . '/helpers/menus/Primary.php'. 那真的是你想找到文件的地方吗?我猜不是。此外,尝试 this: Application_Controller_Plugin_Aclwill never be included 会导致您缺少资源类型Controller_Plugin及其内部目录APPLICATION_PATH . '/helpers'(我怀疑您是否想要)。

我建议您将Zend_Loader_Autoloader_Resource所有的这种用法一起删除,并将命名空间添加到应用程序的/library目录中,并创建以下目录结构:

/library/Application/Controller/Plugin/Acl.php
/library/Application/Form/
...etc

然后,您需要/library通过 index.php 将路径添加到您的 PHP include_path。(我认为这是标准)

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

最后,将Application命名空间添加到您的application.ini

autoloaderNamespaces.app = 'Application'

那应该可以解决您的问题。我建议你更多地了解这门课的目的Zend_Loader_Autoloader_Resource

于 2011-07-21T20:59:26.790 回答