почему Zend Framework не может найти мой плагин контроллера - PullRequest
0 голосов
/ 24 августа 2010

Я пытаюсь написать плагин контроллера для проверки подлинности.Я создал класс плагина, поместил в каталог Application, Application.php и зарегистрировался в Bootstrap.php.Но есть ошибка: Неустранимая ошибка: класс «Аутентификация» не найден.Где Zend Framework ищет плагины, как определить, где они находятся?

//Application/Authentication.php
class Authentication extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            return;
        }

        self::setDispatched(false);
        // handle unauthorized request...
    }
}


        //bootstrap
    protected function _initAutoloader()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
        'basePath' => APPLICATION_PATH,
        'namespace' => ''));

        $autoLoader = Zend_Loader_Autoloader::getInstance();
        $autoLoader->registerNamespace('Common_');

        return $moduleLoader;              
    }



    protected function _initPlugins()
    {
        $controller = Zend_Controller_Front::getInstance();
        $controller->registerPlugin(new Authentication());
        $controller->dispatch();        
    }

Спасибо.

1 Ответ

0 голосов
/ 25 мая 2013

Я знаю, что вопрос действительно старый, но я оставляю ответ на случай, если кто-то еще наткнется здесь, как я.Вот как (начиная с версии 1 от 1.8 и выше), как зарегистрировать плагин:

ZF следует стандарту именования: A_B анализирует A / B.php.Для плагина ZF автоматически просматривает «путь к библиотеке», что означает, что он ищет в каталоге вашей библиотеки (где находится ваша библиотека Zend).Поэтому плагин должен выглядеть следующим образом: библиотека / что-то / все, что угодно ... Это один сценарий.Тогда все, что вам нужно сделать в application.ini, это добавить следующее:

autoloaderNamespaces[] = "Something_"
resources.frontController.plugins.Whatever = "Something_Whatever"

В вашем случае это будет выглядеть так:

autoloaderNamespaces[] = "Common_"
resources.frontController.plugins.Authentication = "Common_Authentication"

И ваша структура библиотеки должна быть:

library/Common/Authentication.php

надеюсь, что это поможет любому, кто наткнется здесь!

- Относительно вашего поста / вопроса

Причина, по которой он не "находит" класс, это потому, чтоон не загружается с автозагрузкой.Одной из причин может быть то, что вы каким-то образом нарушаете соглашение об именах (ваш файл аутентификации не находится в каталоге Common_, или имя файла класса аутентификации не Common_Authentication ...).Быстрое решение было бы поместить:

//bootstrap
    protected function _initAutoloader()
    {
        require_once 'Common/Authentication.php';           
    }

с этим дополнением, _initPlugins () сможет выполнить без проблем.:)

...