Задать вопрос
@rsi
software engineer

Как подключить плагин к front контроллеру?

Хочу поместить в плагин разграничение прав доступа, но столкнулся с проблемой создания плагина. Пробовал искать решение в официальном мануале и в других статьях, но там приводятся примеры кода плагина и кода подключения, который сказано нужно написать в Bootstrap. Но суть проблемы в том, что я банально не знаю куда положить написанный файл, что бы зенд его увидел, а при добавлении в Bootstrap кода из примера получаю ошибки.

P.S. структура проекта стандартная, созданная zend_tool.
  • Вопрос задан
  • 2788 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
d3z
@d3z
Плагины для FrontController`a подключаются так:
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new You_Plugin_Example());

Понятно, что перед инстанцированием необходимо подключить файл с классом плагина:
require APPLICATION_PATH . '/path/to/plugins/example.php';

Но лучше, конечно, настроить автозагрузчик. Сделать это можно несколькими способами:
  1. Вы можете загружать плагин из собственной библиотеки. Для этого подключите новое пространство имен:
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace('You_');
    

  2. Вы можете указать загрузчику префикс и директорию с плагинами:
    $loader = new Zend_Loader_PluginLoader();
    $loader->addPrefixPath('You_Plugin', APPLICATION_PATH . '/path/to/plugins/');
    

  3. Вы можете добавить необходимые директории в module autoloader:
    $module = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Example',
        'basePath'  => APPLICATION_PATH . '/modules/example',
            'resourceTypes' => array(
                'plugin' => array(
                    'namespace' => 'Plugin',
                    'path'      => 'plugins/',
                ),
            )
    ));
    

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sonic_SE
@Sonic_SE
В application\Bootstrap.php добавляешь метод _initControllerPlugins(). Если плагинам не нужны параметры, то можно в application.ini добавить строчку resources.frontController.plugins

Вот пример:
protected function _initControllerPlugins()
{
$acl = new AclModel();
$auth = Zend_Auth::getInstance();

$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new My_Controller_Plugin_Acl($acl, $auth));
$frontController->registerPlugin(new My_Controller_Plugin_AuthCookie($auth));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы