Zend Framework: нужна автоматическая загрузка при помощи IIS7 - PullRequest
0 голосов
/ 21 июля 2011

З.Ф. носит меня худым. Я не могу заставить работать один экземпляр AutoLoader без предварительного использования этого для добавления его в качестве ресурса

require_once ('Zend\Loader\Autoloader.php');
Zend_Loader_Autoloader::getInstance();

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
           'basePath'  => APPLICATION_PATH . '/helpers',
           'namespace' => 'Application_',
       ));

$resourceLoader->addResourceType('form', 'forms/', 'Form')
           ->addResourceType('functions', 'functions/', 'Functions')
           ->addResourceType('menus', 'menus/', 'Menu')
           ->addResourceType('acls', 'acls/', 'Acls');

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

// located in application/controllers/plugins
    require('controllers\plugins\Acl.php');
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Application_Controller_Plugin_Acl($acl));

Почему я должен использовать require Это вещь IIS7? Я думал, что AutoLoader должен был позаботиться обо всем.

1 Ответ

2 голосов
/ 22 июля 2011

Не думаю, что это проблема IIS. Я думаю, что это неправильное использование Zend_Loader_Autoloader_Resource.

Вы говорите автозагрузчику через Zend_Loader_Autoloader_Resource добавить пространство имен Application и указать, что оно находится в basePath APPLICATION_PATH . '/helpers'.

Из этого, если я попытаюсь:

new Application_Menu_Primary();

ZF должен найти его в APPLICATION_PATH . '/helpers/menus/Primary.php'. Это действительно то место, где вы хотите найти файл? Я думаю, нет. Кроме того, попытка сделать это: Application_Controller_Plugin_Acl никогда не будет включена, потому что вы пропустили тип ресурса Controller_Plugin и его каталог внутри APPLICATION_PATH . '/helpers' (я сомневаюсь, что вы этого хотите).

Я бы посоветовал вам полностью исключить использование Zend_Loader_Autoloader_Resource, добавить свое пространство имен в каталог /library приложения и создать следующую структуру каталогов:

/library/Application/Controller/Plugin/Acl.php
/library/Application/Form/
...etc

Затем вам нужно добавить /library путь к вашему PHP include_path через index.php. (Я думал это стандартно)

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

Наконец, добавьте пространство имен Application к вашему application.ini:

autoloaderNamespaces.app = 'Application'

Это должно прояснить твои проблемы. Предлагаю вам больше узнать о цели этого занятия Zend_Loader_Autoloader_Resource.

...