2011-01-06 23 views
2

我有自定義的前端控制器插件,需要一些選項。 這時我的application.ini文件中加載(插件)是這樣的:Zend框架。如何將選項傳遞給自定義前端控制器插件?

resources.frontController.plugins.DynamicLayout = "My_Controller_Plugin_DynamicLayout" 

在這個時候,我只是有option.ini文件,然後使用一個Zend_Config來導入。 有沒有辦法從ZEND的主application.ini文件中指定插件選項? 也許這樣的事情?:

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

回答

1

我使用這樣的傳遞信息使用引導我的佈局。

此示例適用於在不同域上運行的應用程序,因此它們的佈局不同。 (並且MSIE有單獨的版本)。每個域作爲一個單獨的application.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); 

    } 
} 

的的application.ini:

[production] 
layoutName = "Some_File_Name" 
+0

我們不都只是崇拜MSIE – Stann 2011-01-06 05:53:06

相關問題