2012-03-07 3 views
2

Я пытаюсь написать плагин контроллера, который я буду использовать для аутентификации пользователей. Я написал плагин, и он должен работать, но я просто не понимаю, как загрузить плагин ... Я читал, что Zend Framework имеет много возможностей для автозагрузки.Загрузчик плагинов Zend Framework

Моя нынешняя структура каталогов:

domains 
example.com 
    Application 
     configs 
     controllers 
      IndexController.php 
      AuthController.php 
      ErrorController.php 
     forms 
     layouts 
      scripts 
       layout.phtml 
     models 
     plugins 
      AuthenticationPlugin.php 
     views 
      helpers 
      scripts 
       auth 
        login.phtml 
       error 
        error.phtml 
       index 
        index.phtml 
     Bootstrap.php 
    library 
     Zend 
    pubic_html 
     .htaccess 
     index.php 

Может ли кто-нибудь мне помочь?

Заранее благодарен!

ответ

3

Предполагая, что ваш appnamespace является Application_, то ваш класс плагина должен быть:

  1. именем Application_Plugin_AuthenticationPlugin

  2. хранится в файле application/plugins/AuthenticationPlugin.php

  3. зарегистрированного в FrontController используя что-то вроде (в application/configs/application.ini):

    resources.frontController.plugins.auth = "Application_Plugin_AuthenticationPlugin"

0

Добавьте следующую строку в, например, ваш Bootstrap файл:

Zend_Controller_Front::getInstance()->registerPlugin(new AuthenticationPlugin()); 
+0

Тогда я получаю сообщение о том, что класс AuthenticationPlugin не может быть найден ... Могу ли я создать другой каталог в каталоге библиотеки и работать с плагинами там? –

+0

Структура вашего каталога в порядке. Внутри AuthenticationPlugin.php попробуйте переименовать свой класс в Zend_Plugin_AuthenticationPlugin и измените приведенную выше строку на «Zend_Controller_Front :: getInstance() -> registerPlugin (новый Zend_Plugin_AuthenticationPlugin());' – Config

+1

Я бы посоветовал не размещать пользовательские классы приложений/lib в пределах Пространство имен Zend_. Лучше я назову их в пространстве имен или в отдельном пространстве имен lib. –

2

Вы можете создать свою собственную папку библиотеки с аналогичной структурой папок в Zend. Например (в предположении, собственное пространство имен My_):

library 
    My 
    Controller 
     Plugin 
     Authentication.php 

Authentication.php будет содержать класс с именем My_Controller_Plugin_Authentication.

Вы бы затем зарегистрировать пространство имен в вашей начальной загрузки (manual):

$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace('My_'); 

В противном случае, вы могли бы использовать структуру выше, с использованием автозагрузчика ресурса (manual). Zend Framework ожидает, что классы в этих папках также имеют префикс пространства имен, поэтому ваше имя класса будет Plugin_AuthenticationPlugin.