1

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

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

4

2 回答 2

1

您为类命名的方法违反了 ZF 采用的 PSR-0 原则。你会更容易遵循 PSR-0。在这种情况下,您唯一要做的就是将您的 Project_ 类重新定位到 Project 目录。

于 2012-09-28T09:01:15.530 回答
0

此答案中使用的方法可能会有所帮助。一个定制的自动装载机似乎是去这里的方式。——</p>

将以下行添加到 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());
    }
}

显然,我没有与您匹配的环境,因此无法对此进行测试。但是,我已经根据我自己对自动加载器的使用对其进行了调整,因此它应该可以在没有太多调整的情况下工作。

由于David Weinraub 发布的答案,我最初遇到了这种技术,并且从那以后发现它非常有用。

说了这么多,akond 的回答是很好的建议,将是首选;与框架合作,而不是反对它。如果这不是您的选择,我会提供此答案。

于 2012-09-29T09:17:37.810 回答