Zend框架:需要在IIS7上自动加载帮助

时间:2011-07-21 19:31:47

标签: zend-framework autoloader

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应该照顾好一切。

1 个答案:

答案 0 :(得分:2)

我不认为这是一个IIS问题。我认为这是对Zend_Loader_Autoloader_Resource的不当使用。

您通过Zend_Loader_Autoloader_Resource告诉自动加载器添加名称空间Application,并且它位于basePath APPLICATION_PATH . '/helpers'中。

如果我尝试,请从此处开始:

new Application_Menu_Primary();

ZF应该在APPLICATION_PATH . '/helpers/menus/Primary.php'中找到它。这真的是你想找到文件的地方吗?我猜不是。此外,尝试这样做:永远不会包含Application_Controller_Plugin_Acl导致您遗漏资源类型Controller_Plugin及其APPLICATION_PATH . '/helpers'内的目录(我怀疑您是否希望如此)。

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

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

然后,您需要通过index.php将/library路径添加到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