2011-01-06 9 views
2

Ich habe benutzerdefinierte Front-Controller-Plugin, das einige Optionen einnimmt. Zu dieser Zeit lade ich es (Plugin) in application.ini-Datei wie folgt:Zend Rahmen. Wie übergebe ich Optionen an ein benutzerdefiniertes Front-Controller-Plugin?

resources.frontController.plugins.DynamicLayout = "My_Controller_Plugin_DynamicLayout" 

Zu dieser Zeit habe ich gerade option.ini Datei und dann Zend_Config verwenden es zu importieren. Gibt es eine Möglichkeit, Plugin-Optionen aus ZENDs primärer Datei application.ini anzugeben? Vielleicht so etwas wie ?:

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

Antwort

1

ich so etwas wie diese verwenden Informationen mit Bootstrap meiner Layouts zu übergeben.

Dieses Beispiel gilt für eine Anwendung, die auf verschiedenen Domänen ausgeführt wird, also unterschiedliche Layouts. (und hat eine separate Version für MSIE). Jede Domain als separate 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); 
    } 

} 

Das Layout Handler:

<?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); 

    } 
} 

Die application.ini:

[production] 
layoutName = "Some_File_Name" 
+0

nicht wir alle nur lieben MSIE – Stann