ソースを参照

ZF-8315: support module parameter

- Adds support for module parameter of partials consumed by ViewScript decorator

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23298 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 15 年 前
コミット
eca565cf93

+ 50 - 2
library/Zend/Form/Decorator/ViewScript.php

@@ -31,6 +31,7 @@ require_once 'Zend/Form/Decorator/Abstract.php';
  * - separator: separator to use between view script content and provided content (defaults to PHP_EOL)
  * - placement: whether to append or prepend view script content to provided content (defaults to prepend)
  * - viewScript: view script to use
+ * - viewModule: module that view script is in (optional)
  *
  * The view script is rendered as a partial; the element being decorated is
  * passed in as the 'element' variable:
@@ -39,7 +40,7 @@ require_once 'Zend/Form/Decorator/Abstract.php';
  * echo $this->element->getLabel();
  * </code>
  *
- * Any options other than separator, placement, and viewScript are passed to
+ * Any options other than separator, placement, viewScript, and viewModule are passed to
  * the partial as local variables.
  *
  * @category   Zend
@@ -64,6 +65,12 @@ class Zend_Form_Decorator_ViewScript extends Zend_Form_Decorator_Abstract
     protected $_viewScript;
 
     /**
+     * View script module
+     * @var string
+     */
+    protected $_viewModule;
+
+    /**
      * Set view script
      *
      * @param  string $script
@@ -100,6 +107,42 @@ class Zend_Form_Decorator_ViewScript extends Zend_Form_Decorator_Abstract
     }
 
     /**
+     * Set view script module
+     * 
+     * @param  string $module
+     * @return Zend_Form_Decorator_ViewScript
+     */
+    public function setViewModule($viewModule)
+    {
+        $this->_viewModule = (string) $viewModule;
+        return $this;
+    }
+
+    /**
+     * Get view script module
+     * 
+     * @return string|null
+     */
+    public function getViewModule()
+    {
+        if (null === $this->_viewModule) {
+            if (null !== ($element = $this->getElement())) {
+                if (null !== ($viewModule = $element->getAttrib('viewModule'))) {
+                    $this->setViewModule($viewModule);
+                    return $viewModule;
+                }
+            }
+
+            if (null !== ($viewModule = $this->getOption('viewModule'))) {
+                $this->setViewModule($viewModule)
+                     ->removeOption('viewModule');
+            }
+        }
+
+        return $this->_viewModule;
+    }
+
+    /**
      * Render a view script
      *
      * @param  string $content
@@ -127,7 +170,12 @@ class Zend_Form_Decorator_ViewScript extends Zend_Form_Decorator_Abstract
         $vars['content']   = $content;
         $vars['decorator'] = $this;
 
-        $renderedContent = $view->partial($viewScript, $vars);
+        $viewModule = $this->getViewModule();
+        if (empty($viewModule)) {
+            $renderedContent = $view->partial($viewScript, $vars);
+        } else {
+            $renderedContent = $view->partial($viewScript, $viewModule, $vars);
+        }
 
         // Get placement again to see if it has changed
         $placement = $this->getPlacement();

+ 36 - 0
tests/Zend/Form/Decorator/ViewScriptTest.php

@@ -129,6 +129,27 @@ class Zend_Form_Decorator_ViewScriptTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('decorator.phtml', $this->decorator->getViewScript());
     }
 
+    public function testCanSetViewModule()
+    {
+        $this->testViewScriptNullByDefault();
+        $this->decorator->setViewModule('fooModule');
+        $this->assertEquals('fooModule', $this->decorator->getViewModule());
+    }
+
+    public function testCanSetViewModuleViaOption()
+    {
+        $this->testViewScriptNullByDefault();
+        $this->decorator->setOption('viewModule', 'fooModule');
+        $this->assertEquals('fooModule', $this->decorator->getViewModule());
+    }
+
+    public function testCanSetViewModuleViaElementAttribute()
+    {
+        $this->testViewScriptNullByDefault();
+        $this->getElement()->setAttrib('viewModule', 'fooModule');
+        $this->assertEquals('fooModule', $this->decorator->getViewModule());
+    }
+
     public function testRenderingRendersViewScript()
     {
         $this->testCanSetViewScriptViaElementAttribute();
@@ -136,6 +157,21 @@ class Zend_Form_Decorator_ViewScriptTest extends PHPUnit_Framework_TestCase
         $this->assertContains('This is content from the view script', $test);
     }
 
+    public function testRenderingRendersViewScriptWithModule()
+    {
+        $this->testCanSetViewScriptViaElementAttribute();
+
+        $module = 'fooModule';
+
+        // add module to front controller so partial view helper can verify it exists
+        require_once 'Zend/Controller/Front.php';
+        Zend_Controller_Front::getInstance()->addControllerDirectory('', $module);
+
+        $this->getElement()->setAttrib('viewModule', $module);
+        $test = $this->decorator->render('');
+        $this->assertContains('This is content from the view script', $test);
+    }
+
     public function testOptionsArePassedToPartialAsVariables()
     {
         $this->decorator->setOptions(array(