Автозагрузка в Zend Framework - PullRequest
0 голосов
/ 07 июня 2011

как автоматически загрузить класс в пользовательском каталоге по пути к модулю. Структура моего приложения, как показано ниже

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

У меня есть два пользовательских каталога, «api» и «elements», когда я создал объект этого класса, я получил сообщение об ошибке: «Класс фатальной ошибки Admin_Api_Core not found». Я пытаюсь с registerNamespace, но он не работает вообще

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

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Взгляните на 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_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

1 голос
/ 08 июня 2011

Вы можете настроить автозагрузку внутри вашего Module_Bootstrap (почти такой же подход, как в ответе Бенджамина Кремера, но на основе модулей). Для этого создайте файл Bootstrap.php в папке / modules / admin со следующим содержимым:

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). Если у вас много модулей, вы можете создать такие бутстрапы для всех них.

...