我将写一个简单的例子来展示我的需求,因为经过3个小时的研究,我没有找到类似的东西。
我的所有课程都以Project_
开头。例如。 Project_BaseController
是基本控制器类。
BaseController.php
位于/www/Core/
(这是set_include_path
中的路径之一),但自动加载器会在/www/Core/Project/
搜索它。
我想为/www/Core/
开头的每个班级设置Project_
的路径(之后它应该在命名后找到文件,例如:Project_User => /www/Core/User.php
)
也许Zend_Loader_Autoloader_Resource
是我需要的?
我对此表示怀疑,因为资源不是全局配置。
答案 0 :(得分:1)
您为类命名的方法违反了ZF采用的PSR-0主体。你可以更容易地遵循PSR-0。在这种情况下,您唯一要做的就是将Project_类重新定位到Project目录。
答案 1 :(得分:0)
this answer中使用的方法可能有所帮助。一个自定义自动装载机似乎是这里的方式。 -
将以下行添加到application.ini
autoloadernamespaces[] = "App_"
调整此项以匹配您保存的库文件,我保留在library/App
。
在App / Loader / Autoloader / Project.php中创建自动加载器,如下所示: -
class App_Loader_Autoloader_Project implements Zend_Loader_Autoloader_Interface
{
public function autoload($class)
{
$project = explode('_', $class);
if ($project[0] != 'Project'){
return false;
}
$project[0] = '/www/core';
require_once implode('/', $project) . '.php'
return $class;
}
}
在引导程序中初始化自动加载器: -
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoloading() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader(new App_Loader_Autoloader_Project());
}
}
显然,我没有适合你的环境,所以我无法测试。但是,我已经从我自己使用的自动加载器中进行了调整,所以它应该可以在没有太多调整的情况下工作。
由于answer posted by David Weinraub,我最初遇到过这种技术,并且发现它非常有用。
说了这么多,akond's answer是好建议,是首选方案;使用框架,而不是反对它。如果您无法选择,我会提供此答案。