Плагин Frontcontroller не загружается

Когда я использую плагин frontcontroller в Zend Frameworker, кажется, что он запускается перед автозагрузчиком. Как мне это сделать?

в моем приложении.ini

resources.frontController.plugins.routes = "Plugin_Routes"

плагины/Routes.php

class Plugin_Routes extends Zend_Controller_Plugin_Abstract {
}

Сообщение об ошибке..

Неустранимая ошибка: класс «Plugin_Routes» не найден в /usr/share/php/Zend/Application/Resource/Frontcontroller.php в строке 111.

Пути включения вообще нет?


person Chris    schedule 04.12.2010    source источник


Ответы (4)


Раньше, у меня был :

resources.frontController.plugins[] = "Dagho_Controller_Plugin_Auth"

и это работает для меня очень хорошо

обновление: ничего особенного, только эти строки ниже и автозагрузчик доктрины

protected function _initAutoload() {
        $autoloader = new Zend_Application_Module_Autoloader(array(
                    'namespace' => 'Default',
                    'basePath' => dirname(__FILE__),
                ));

        return $autoloader;
    }
person tawfekov    schedule 04.12.2010
comment
Тот же эффект. Я думаю, что это то же самое, за исключением того, что у вас нет ассоциативного массива и дополнительного пространства имен. У вас есть что-то в начальной загрузке, чтобы сначала загрузить автозагрузчик? - person Chris; 04.12.2010
comment
о, не могли бы вы еще раз проверить разрешение! - person tawfekov; 04.12.2010
comment
Хорошо, вы меня в правильном направлении: D Кажется, пространство имен принудительно используется для плагинов ... даже в руководстве об этом не упоминается :) - person Chris; 04.12.2010

Это правильно?

plugins/Routes.php

Зенд ожидает

Plugin/Routes.php

Потому что автозагрузчик будет использовать имя класса для поиска нужных папок.

My_Class_Something

Будет:

My/Class/Something.php
person Iznogood    schedule 04.12.2010
comment
Но это каталог, который создает инструмент Zend... так же, как модули / и контроллеры / в нижнем регистре и во множественном числе, но в имени вашего класса вы делаете их с заглавной буквы в единственном числе. В сообщении об ошибке нет даже пути включения, что делает я думаю, что автозагрузчик еще не существует до регистрации плагинов. - person Chris; 04.12.2010

Если ничего не работает, попробуйте поиграться с автозагрузчиком.

добавьте этот код в класс начальной загрузки

protected function _initBlablablaPlugin(){

    $autoloader = Zend_Loader_Autoloader::getInstance();
    //If your plugin is placed in the /library/My/Plugin/Blablabla, then register the "My_" namespace
    $autoloader->registerNamespace('My_');

    $frontController = Zend_Controller_Front::getInstance();
    $frontController->registerPlugin(new My_Plugin_Authorize());
}
person katrotz    schedule 31.01.2012

Хорошо, руководство кажется неправильным или, по крайней мере, неясным: http://framework.zend.com/manual/1.11/en/zend.controller.plugins.html

Чего не хватает, так это того, что вам нужно пространство имен приложения, иначе оно не будет работать в 1.11.

app.ini

resources.frontController.plugins.routes = "Application_Plugin_Routes"

плагин

class Application_Plugin_Routes extends Zend_Controller_Plugin_Abstract { }

Будет работать нормально :)

person Chris    schedule 04.12.2010