zend框架中的自动加载

发布于 2024-11-14 02:50:19 字数 380 浏览 5 评论 0原文

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

application
|_ modules
   |_admin
     |_api
     | |_Core.php
     |_elements
       |_Dialog.php

我有两个自定义目录,“api”和“elements”,当我实例化这两个类的对象时,我收到了错误消息:“未找到致命错误类 Admin_Api_Core”。我尝试使用 registerNamespace 但它根本不起作用

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

how to autoload a class in custom directory on module path. My application's structure is like below

application
|_ modules
   |_admin
     |_api
     | |_Core.php
     |_elements
       |_Dialog.php

i have two custom directory, 'api' and 'elements', when i instantiated an object of that two class i have received error message: 'Fatal error class Admin_Api_Core is not found'. I try with registerNamespace but it not work at all

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蒲公英的约定 2024-11-21 02:50:19

查看 ZF 资源自动加载器

将以下内容添加到 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_Core 加载 APPLICATION_PATH 。 '/api/Core.php
Element_Core 加载 APPLICATION_PATH 。 '/elements/Core.php
Admin_Api_Core 加载 APPLICATION_PATH 。 '/modules/admin/api/Core.php
Admin_Element_Core 加载 APPLICATION_PATH 。 '/modules/admin/elements/Core.php

Have a look at ZFs Resource Autoloaders.

Add the following to your 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_Core loads APPLICATION_PATH . '/api/Core.php
Element_Core loads APPLICATION_PATH . '/elements/Core.php
Admin_Api_Core loads APPLICATION_PATH . '/modules/admin/api/Core.php
Admin_Element_Core loads APPLICATION_PATH . '/modules/admin/elements/Core.php

辞慾 2024-11-21 02:50:19

您可以在 Module_Bootstrap 中配置自动加载(与 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_Api_Core 等(您应该指定所有资源类型)。如果您有许多模块,您可以为所有模块创建此类引导程序。

You can configure autoloading inside your Module_Bootstrap (almost same approach as in Benjamin Cremer's answer but module based).
To do it - create file Bootstrap.php in /modules/admin folder with the following content:

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;
    }

}

After that you'll be able to instantiate class Admin_Api_Core etc. (you should specify all resoursTypes). If you have many modules, you can create such bootstraps for all of them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文