Фреймворк Зенд. как передать параметры в пользовательский плагин переднего контроллера?

У меня есть настраиваемый плагин переднего контроллера, который принимает некоторые параметры. В это время я загружаю его (плагин) в файл application.ini следующим образом:

resources.frontController.plugins.DynamicLayout = "My_Controller_Plugin_DynamicLayout"

На данный момент у меня есть только файл option.ini, а затем я использую zend_config для его импорта. Есть ли способ указать параметры плагина из основного файла ZEND application.ini? Может как-то так?:

resources.frontController.plugins.DynamicLayout.test = "test_value"

person Stann    schedule 06.01.2011    source источник


Ответы (1)


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

Этот пример относится к приложению, которое работает в разных доменах, поэтому используются разные макеты. (и имеет отдельную версию для MSIE). Каждый домен как отдельное приложение.ini

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    protected function _initAutoload() {
        return new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH
        ));
    }

    // <snip> more _initMethods: Loggers, ACLs, ViewHelpers, etc. </snip>

    /**
     * Setup dynamic layout plugin
     *
     * @return Zend_Controller_Plugin_Broker
     */
    protected function _initFrontControllerLayoutPlugin() {
        // Ensure the front controller is initialized
        $this->bootstrap('FrontController');
        $front = $this->getResource('FrontController');

        $this->bootstrap('layout');
        $layout = $this->getResource('layout');

        // Set our Front Controller Plugin
        // !!!! right here I pass values to the layout
        // !!!! example layoutName, but you could pass anything you want...
        $plugin = new Plugin_DynamicLayout($layout, $this->getOption('layoutName'));

        return $front->registerPlugin($plugin);
    }

}

Обработчик макета:

<?php

class Plugin_DynamicLayout extends Zend_Controller_Plugin_Abstract {

    private $layoutName;

    public function __construct(Zend_Layout $layout, $layoutName) {
        $this->layout = $layout;
        $this->layoutName = $layoutName;
    }

      public function preDispatch(Zend_Controller_Request_Abstract $request) {

        $layoutName = $this->layoutName;

        if (false !== strpos($request->getHeader('User-Agent'), 'MSIE')) {
            $layoutName = $layoutName . '-ie';
        }

        $this->layout->setLayout($layoutName);

    }
}

Приложение.ini:

[production]
layoutName = "Some_File_Name"
person Lance Rushing    schedule 06.01.2011