ソースを参照

ZF-9044 Zend_App_Resource_fc can now also set the stackindex of fc plugins

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20822 44c647ce-9c0f-0410-b52a-842ac1e357ba
freak 16 年 前
コミット
3342829b28

+ 12 - 1
library/Zend/Application/Resource/Frontcontroller.php

@@ -95,8 +95,19 @@ class Zend_Application_Resource_Frontcontroller extends Zend_Application_Resourc
 
                 case 'plugins':
                     foreach ((array) $value as $pluginClass) {
+                    	$stackIndex = null;
+                    	if(is_array($pluginClass) && 
+                    	   isset($pluginClass['class']))
+                    	{
+                    		if(isset($pluginClass['stackindex'])) {
+                    			$stackIndex = $pluginClass['stackindex'];
+                    		}
+
+                    		$pluginClass = $pluginClass['class'];
+                    	}
+
                         $plugin = new $pluginClass();
-                        $front->registerPlugin($plugin);
+                        $front->registerPlugin($plugin, $stackIndex);
                     }
                     break;
 

+ 33 - 0
tests/Zend/Application/Resource/FrontcontrollerTest.php

@@ -301,6 +301,39 @@ class Zend_Application_Resource_FrontcontrollerTest extends PHPUnit_Framework_Te
         $front = $resource->getFrontController();
         $this->assertNull($front->getBaseUrl());
     }
+    
+    /**
+     * @group ZF-9044
+     */
+    public function testSettingOfRegisterPluginIndexActuallyWorks()
+    {
+        $plugins = array(
+            array('class' => 'Zend_Controller_Plugin_ErrorHandler',
+                  'stackindex' => 10),
+            'Zend_Controller_Plugin_ActionStack',
+            array('class' => 'Zend_Controller_Plugin_PutHandler',
+                  'stackindex' => 5),
+        );
+
+        $expected = array(
+            1 => 'Zend_Controller_Plugin_ActionStack',
+            5 => 'Zend_Controller_Plugin_PutHandler',
+            10 => 'Zend_Controller_Plugin_ErrorHandler',
+        );
+        
+        $resource = new Zend_Application_Resource_Frontcontroller(array(
+            'plugins' => $plugins
+        ));
+
+        $resource->init();
+        $front = $resource->getFrontController();
+        $plugins = $front->getPlugins();
+        
+        $this->assertEquals(count($expected), count($plugins));
+        foreach($expected as $index => $class) {
+        	$this->assertEquals($class, get_class($plugins[$index]));
+        }
+    }
 }
 
 if (PHPUnit_MAIN_METHOD == 'Zend_Application_Resource_FrontcontrollerTest::main') {