更改某些前缀的Zend自动加载路径

时间:2012-09-27 21:12:01

标签: zend-framework path namespaces autoload

我将写一个简单的例子来展示我的需求,因为经过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是我需要的?

我对此表示怀疑,因为资源不是全局配置。

2 个答案:

答案 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是好建议,是首选方案;使用框架,而不是反对它。如果您无法选择,我会提供此答案。