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应该处理好所有的事情。
发布于 2011-07-22 04:59:27
我不认为这是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'中找到它。你真的想在那里找到这个文件吗?我猜不是。此外,尝试这样做:由于缺少资源类型Controller_Plugin及其在APPLICATION_PATH . '/helpers'中的目录,Application_Controller_Plugin_Acl将永远不会包含在内(我怀疑您是否希望这样)。
我建议您一起删除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的目的。
https://stackoverflow.com/questions/6781650
复制相似问题