【问题标题】:Change Zend autoload path for certain prefixes更改某些前缀的 Zend 自动加载路径
【发布时间】:2012-09-19 18:04:42
【问题描述】:

我将写一个简单的例子来说明我需要什么,因为经过 3 个小时的研究,我没能找到类似的东西。

我的所有课程都以Project_ 开头。例如。 Project_BaseController 是基本控制器类。

BaseController.php 位于/www/Core/(这是set_include_path 中的路径之一),但自动加载器在/www/Core/Project/ 搜索它。

我想为每个以Project_ 开头的类设置/www/Core/ 的路径(之后它应该找到命名后的文件,例如:Project_User => /www/Core/User.php)

也许Zend_Loader_Autoloader_Resource 是我需要的?

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

【问题讨论】:

    标签: zend-framework path namespaces autoload


    【解决方案1】:

    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 是一个很好的建议,将是首选;与框架合作,而不是反对它。我会提供此答案,以防您无法选择。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        • 2012-08-17
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        相关资源
        最近更新 更多