【问题标题】:Autoloading in zend frameworkZend 框架中的自动加载
【发布时间】:2011-06-07 11:56:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php zend-framework autoload zend-autoloader


    【解决方案1】:

    看看 ZFs Resource Autoloaders

    将以下内容添加到您的 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

    【讨论】:

    • 根本不起作用,默认的基本路径不是管理模块,而是另一个模块,如果我推动将默认设置为 admin 是的,它可以工作,但如果我设置为另一个它不起作用
    【解决方案2】:

    您可以在 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 等类(您应该指定所有资源类型)。如果您有很多模块,您可以为所有模块创建这样的引导程序。

    【讨论】:

    • 太棒了,这项工作!非常感谢 ischenkodv
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2011-01-07
    • 2011-12-07
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多