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

Zend framework 更改某些前缀的Zend自动加载路径,zend-framework,path,namespaces,autoload,Zend Framework,Path,Namespaces,Autoload,我要写一个简单的例子来说明我需要什么,因为经过3个小时的研究,我没有找到类似的东西 我所有的课程都是从Project\uu开始的。例如,Project\u BaseController是基本控制器类 BaseController.php位于/www/Core/(这是集合中的路径之一\u include\u path),但自动加载程序会在/www/Core/Project/中搜索它 我想为每个以Project\uu开头的类设置/www/Core/的路径(之后它应该在命名后找到文件,比如:Proje

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

我所有的课程都是从
Project\uu
开始的。例如,
Project\u BaseController
是基本控制器类

BaseController.php
位于
/www/Core/
(这是
集合中的路径之一\u include\u path
),但自动加载程序会在
/www/Core/Project/
中搜索它

我想为每个以
Project\uu
开头的类设置
/www/Core/
的路径(之后它应该在命名后找到文件,比如:
Project\u User=>/www/Core/User.php

也许我需要的是
Zend\u Loader\u Autoloader\u资源


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

您命名类的方法违反了ZF采用的PSR-0原则。你更容易跟随PSR-0。在这种情况下,您只需将项目类重新定位到项目目录。

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

中使用的方法可能会有所帮助。定制的自动加载器似乎是一种方式

将以下行添加到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());
    }
}
显然,我没有一个环境可以与你的环境相匹配,所以我无法测试这个。然而,我已经根据我自己使用的自动加载器对其进行了调整,因此它应该可以正常工作,而无需太多调整

我最初是在一个应用程序中遇到这种技术的,从那以后我发现它非常有用

话虽如此,这是一个很好的建议,是首选;与框架一起工作,而不是反对它。如果您不能选择,我将提供此答案。

中使用的方法可能会有所帮助。定制的自动加载器似乎是一种方式

将以下行添加到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());
    }
}
显然,我没有一个环境可以与你的环境相匹配,所以我无法测试这个。然而,我已经根据我自己使用的自动加载器对其进行了调整,因此它应该可以正常工作,而无需太多调整

我最初是在一个应用程序中遇到这种技术的,从那以后我发现它非常有用

话虽如此,这是一个很好的建议,是首选;与框架一起工作,而不是反对它。我提供这个答案,以防这不是你的选择