0

モジュール パスのカスタム ディレクトリにあるクラスを自動ロードする方法。私のアプリケーションの構造は以下のようなものです

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

「api」と「elements」という 2 つのカスタム ディレクトリがあり、その 2 つのクラスのオブジェクトをインスタンス化すると、「致命的なエラー クラス Admin_Api_Core が見つかりません」というエラー メッセージが表示されました。registerNamespace を試してみましたが、まったく機能しません

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

2 に答える 2

3

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

于 2011-06-07T13:16:33.843 に答える
1

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 などをインスタンス化できるようになります (すべての resoursTypes を指定する必要があります)。多くのモジュールがある場合は、それらすべてに対してそのようなブートストラップを作成できます。

于 2011-06-08T09:28:18.210 に答える