Переглянути джерело

[Form] Iterator support for ThemeRenderer

Benjamin Eberlei 14 роки тому
батько
коміт
cd1ce86aee

+ 10 - 1
src/Symfony/Component/Form/Renderer/ThemeRenderer.php

@@ -16,7 +16,7 @@ use Symfony\Component\Form\Renderer\Theme\FormThemeInterface;
 use Symfony\Component\Form\Renderer\Theme\FormThemeFactoryInterface;
 use Symfony\Component\Form\Renderer\Plugin\FormRendererPluginInterface;
 
-class ThemeRenderer implements FormRendererInterface, \ArrayAccess
+class ThemeRenderer implements FormRendererInterface, \ArrayAccess, \IteratorAggregate
 {
     private $form;
 
@@ -237,4 +237,13 @@ class ThemeRenderer implements FormRendererInterface, \ArrayAccess
     {
         throw new \BadMethodCallException('Not supported');
     }
+
+    public function getIterator()
+    {
+        if (isset($this->vars['fields'])) {
+            $this->rendered = true;
+            return new \ArrayIterator($this->vars['fields']);
+        }
+        return new \ArrayIterator(array());
+    }
 }

+ 49 - 0
tests/Symfony/Tests/Component/Form/Renderer/ThemeRendererTest.php

@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Tests\Component\Form\Renderer;
+
+use Symfony\Component\Form\Renderer\ThemeRenderer;
+
+class ThemeRendererTest extends \PHPUnit_Framework_TestCase
+{
+    protected function createThemeFactory()
+    {
+        $themeFactory = $this->getMock('Symfony\Component\Form\Renderer\Theme\FormThemeFactoryInterface');
+        $themeFactory->expects($this->once())
+                     ->method('create')
+                     ->will($this->returnValue($this->getMock('Symfony\Component\Form\Renderer\Theme\FormThemeInterface')));
+        return $themeFactory;
+    }
+
+    public function testArrayAccess()
+    {
+        $themeFactory = $this->createThemeFactory();
+        $renderer = new ThemeRenderer($themeFactory);
+        $renderer->setVar('fields', array('foo' => 'baz', 'bar' => 'baz'));
+
+        $this->assertTrue(isset($renderer['foo']));
+        $this->assertTrue(isset($renderer['bar']));
+        $this->assertEquals('baz', $renderer['bar']);
+    }
+
+    public function testIterator()
+    {
+        $themeFactory = $this->createThemeFactory();
+        
+        $renderer = new ThemeRenderer($themeFactory);
+        $renderer->setVar('fields', array('foo' => 'baz', 'bar' => 'baz'));
+
+        foreach ($renderer AS $child) {
+            $this->assertEquals('baz', $child);
+        }
+    }
+}