Php zend框架中的自动加载

Php zend框架中的自动加载,php,zend-framework,autoload,zend-autoloader,Php,Zend Framework,Autoload,Zend Autoloader,如何在模块路径的自定义目录中自动加载类。我的应用程序的结构如下所示 application |_ modules |_admin |_api | |_Core.php |_elements |_Dialog.php 我有两个自定义目录“api”和“elements”,当我实例化这两个类的对象时,我收到了错误消息:“致命错误类Admin\u api\u Core未找到”。我尝试使用registerNamespace,但它根本不起作用 Zend_L

如何在模块路径的自定义目录中自动加载类。我的应用程序的结构如下所示

application
|_ modules
   |_admin
     |_api
     | |_Core.php
     |_elements
       |_Dialog.php
我有两个自定义目录“api”和“elements”,当我实例化这两个类的对象时,我收到了错误消息:“致命错误类Admin\u api\u Core未找到”。我尝试使用registerNamespace,但它根本不起作用

Zend_Loader_Autoloader::getInstance()->registerNamespace('Admin_');
看看ZFs

将以下内容添加到Bootstrap.php

protected function _resourceLoader()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'      => 'APPLICATION_PATH',
        'namespace'     => '',
        'resourceTypes' => array(
            'acl' => array(
                'path'      => 'api/',
                'namespace' => 'Acl',
            ),
            'form' => array(
                'path'      => 'elements/',
                'namespace' => 'Element',
            ),
        ),
    ));
}
Api_核心加载<代码>应用程序_路径。'/api/Core.php
元素\u核心加载<代码>应用程序\u路径。'/elements/Core.php
管理Api核心加载
应用程序路径。'/modules/admin/api/Core.php

管理元素核心加载<代码>应用程序路径。'/modules/admin/elements/Core.php

了解ZFs

将以下内容添加到Bootstrap.php

protected function _resourceLoader()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'      => 'APPLICATION_PATH',
        'namespace'     => '',
        'resourceTypes' => array(
            'acl' => array(
                'path'      => 'api/',
                'namespace' => 'Acl',
            ),
            'form' => array(
                'path'      => 'elements/',
                'namespace' => 'Element',
            ),
        ),
    ));
}
Api_核心加载<代码>应用程序_路径。'/api/Core.php
元素\u核心加载<代码>应用程序\u路径。'/elements/Core.php
管理Api核心加载
应用程序路径。'/modules/admin/api/Core.php


管理元素核心加载<代码>应用程序路径。'/modules/admin/elements/Core.php

您可以在模块引导程序中配置自动加载(与Benjamin Cremer的答案中的方法几乎相同,但基于模块)。 为此,请在/modules/admin文件夹中创建文件Bootstrap.php,其中包含以下内容:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function _initAutoload()
    {
        $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'basePath'      => realpath(dirname(__FILE__)),
            'namespace'     => 'Admin',
            'resourceTypes' => array(
                'api' => array(
                    'path'      => 'api/',
                    'namespace' => 'Api'
                )
            )
        ));

        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Admin',
            'basePath'  => dirname(__FILE__),
            'resourceloader' => $resourceLoader
        ));
        return $autoloader;
    }

}

之后,您将能够实例化类Admin\u Api\u Core等(您应该指定所有资源类型)。如果您有许多模块,您可以为所有模块创建这样的引导。

您可以在模块引导中配置自动加载(与Benjamin Cremer的答案几乎相同,但基于模块)。 为此,请在/modules/admin文件夹中创建文件Bootstrap.php,其中包含以下内容:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function _initAutoload()
    {
        $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'basePath'      => realpath(dirname(__FILE__)),
            'namespace'     => 'Admin',
            'resourceTypes' => array(
                'api' => array(
                    'path'      => 'api/',
                    'namespace' => 'Api'
                )
            )
        ));

        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Admin',
            'basePath'  => dirname(__FILE__),
            'resourceloader' => $resourceLoader
        ));
        return $autoloader;
    }

}

之后,您将能够实例化类Admin\u Api\u Core等(您应该指定所有资源类型)。如果您有许多模块,您可以为所有模块创建这样的引导。

根本不起作用,默认的基本路径不是管理模块,而是另一个模块,如果我将默认设置为admin yes,它会起作用,但是如果我将默认设置为另一个,它就不起作用,默认的基本路径不是管理模块,而是另一个模块,如果我按下将默认值设置为admin yes,它会工作,但是如果我设置为另一个,它不会工作得很好,这工作!非常感谢ischenkodv出色的工作!非常感谢你,伊申柯达