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