Forráskód Böngészése

[Form] Completely removed the fields variable in the renderer. The renderer itself supports ArrayAccess and Traversable

Bernhard Schussek 14 éve
szülő
commit
b21929423e

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/choice_widget.html.php

@@ -1,5 +1,5 @@
 <?php if ($expanded): ?>
-    <?php foreach ($fields as $choice => $child): ?>
+    <?php foreach ($renderer as $choice => $child): ?>
         <?php echo $child->getWidget() ?>
         <?php echo $child->getLabel() ?>
     <?php endforeach ?>

+ 3 - 3
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/date_widget.html.php

@@ -10,8 +10,8 @@
     />
 <?php else: ?>
     <?php echo str_replace(array('{{ year }}', '{{ month }}', '{{ day }}'), array(
-        $fields['year']->getWidget(),
-        $fields['month']->getWidget(),
-        $fields['day']->getWidget(),
+        $renderer['year']->getWidget(),
+        $renderer['month']->getWidget(),
+        $renderer['day']->getWidget(),
     ), $date_pattern) ?>
 <?php endif ?>

+ 2 - 2
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/datetime_widget.html.php

@@ -1,3 +1,3 @@
-<?php echo $fields['date']->getWidget() ?>
+<?php echo $renderer['date']->getWidget() ?>
 <?php /* keep space */ ?>
-<?php echo $fields['time']->getWidget() ?>
+<?php echo $renderer['time']->getWidget() ?>

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/field_rest.html.php

@@ -1,4 +1,4 @@
-<?php foreach ($fields as $field): ?>
+<?php foreach ($renderer as $field): ?>
     <?php if (!$field->isRendered()): ?>
         <?php echo $field->getWidget() ?>
     <?php endif; ?>

+ 7 - 7
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/file_widget.html.php

@@ -1,10 +1,10 @@
 <input type="file"
-    id="<?php echo $fields['file']->getVar('id') ?>"
-    name="<?php echo $fields['file']->getVar('name') ?>"
-    <?php if ($fields['file']->getVar('disabled')): ?>disabled="disabled"<?php endif ?>
-    <?php if ($fields['file']->getVar('required')): ?>required="required"<?php endif ?>
-    <?php if ($fields['file']->getVar('class')): ?>class="<?php echo $fields['file']->getVar('class') ?>"<?php endif ?>
+    id="<?php echo $renderer['file']->getVar('id') ?>"
+    name="<?php echo $renderer['file']->getVar('name') ?>"
+    <?php if ($renderer['file']->getVar('disabled')): ?>disabled="disabled"<?php endif ?>
+    <?php if ($renderer['file']->getVar('required')): ?>required="required"<?php endif ?>
+    <?php if ($renderer['file']->getVar('class')): ?>class="<?php echo $renderer['file']->getVar('class') ?>"<?php endif ?>
 />
 
-<?php echo $fields['token']->getWidget() ?>
-<?php echo $fields['name']->getWidget() ?>
+<?php echo $renderer['token']->getWidget() ?>
+<?php echo $renderer['name']->getWidget() ?>

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/form_widget.html.php

@@ -1,6 +1,6 @@
 <div>
     <?php echo $renderer->getErrors() ?>
-    <?php foreach ($fields as $field): ?>
+    <?php foreach ($renderer as $field): ?>
         <?php echo $field->getRow(); ?>
     <?php endforeach; ?>
     <?php echo $renderer->getRest() ?>

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/repeated_row.html.php

@@ -1,3 +1,3 @@
-<?php foreach ($fields AS $field): ?>
+<?php foreach ($renderer as $field): ?>
     <?php echo $field->getRow(); ?>
 <?php endforeach; ?>

+ 3 - 3
src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/time_widget.html.php

@@ -1,12 +1,12 @@
 <?php
     // There should be no spaces between the colons and the widgets, that's why
     // this block is written in a single PHP tag
-    echo $fields['hour']->getWidget(array('size' => 1));
+    echo $renderer['hour']->getWidget(array('size' => 1));
     echo ':';
-    echo $fields['minute']->getWidget(array('size' => 1));
+    echo $renderer['minute']->getWidget(array('size' => 1));
 
     if ($with_seconds) {
         echo ':';
-        echo $fields['second']->getWidget(array('size' => 1));
+        echo $renderer['second']->getWidget(array('size' => 1));
     }
 ?>

+ 14 - 14
src/Symfony/Bundle/TwigBundle/Resources/views/widgets.html.twig

@@ -1,7 +1,7 @@
 {% block field__rows %}
 {% spaceless %}
     {{ renderer.errors }}
-    {% for field in fields %}
+    {% for field in renderer %}
         {{ field.row }}
     {% endfor %}
 {% endspaceless %}
@@ -27,7 +27,7 @@
 
 {% block field__rest %}
 {% spaceless %}
-    {% for field in fields %}
+    {% for field in renderer %}
         {% if not field.rendered %}
             {{ field.row }}
         {% endif %}
@@ -105,7 +105,7 @@
 {% block choice__widget %}
 {% spaceless %}
     {% if expanded %}
-        {% for choice, field in fields %}
+        {% for choice, field in renderer %}
             {{ field.widget }}
             {{ field.label(choice_list.label(choice)) }}
         {% endfor %}
@@ -140,10 +140,10 @@
 
 {% block date_time__widget %}
 {% spaceless %}
-    {{ fields.date.errors }}
-    {{ fields.time.errors }}
-    {{ fields.date.widget }}
-    {{ fields.time.widget }}
+    {{ renderer.date.errors }}
+    {{ renderer.time.errors }}
+    {{ renderer.date.widget }}
+    {{ renderer.time.widget }}
 {% endspaceless %}
 {% endblock date_time__widget %}
 
@@ -153,9 +153,9 @@
         {{ block('text__widget') }}
     {% else %}
         {{ date_pattern|replace({ 
-            '{{ year }}': fields.year.widget, 
-            '{{ month }}': fields.month.widget, 
-            '{{ day }}': fields.day.widget 
+            '{{ year }}': renderer.year.widget, 
+            '{{ month }}': renderer.month.widget, 
+            '{{ day }}': renderer.day.widget 
         })|raw }}
     {% endif %}
 {% endspaceless %}
@@ -163,7 +163,7 @@
 
 {% block time__widget %}
 {% spaceless %}
-    {{ fields.hour.widget({ 'size': '1' }) }}:{{ fields.minute.widget({ 'size': '1' }) }}{% if with_seconds %}:{{ fields.second.widget({ 'size': '1' }) }}{% endif %}
+    {{ renderer.hour.widget({ 'size': '1' }) }}:{{ renderer.minute.widget({ 'size': '1' }) }}{% if with_seconds %}:{{ renderer.second.widget({ 'size': '1' }) }}{% endif %}
 {% endspaceless %}
 {% endblock time__widget %}
 
@@ -203,9 +203,9 @@
 
 {% block file__widget %}
 {% spaceless %}
-    {{ fields.file.widget }}
-    {{ fields.token.widget }}
-    {{ fields.name.widget }}
+    {{ renderer.file.widget }}
+    {{ renderer.token.widget }}
+    {{ renderer.name.widget }}
 {% endspaceless %}
 {% endblock file__widget %}
 

+ 22 - 22
src/Symfony/Component/Form/Renderer/Theme/PhpTheme.php

@@ -64,7 +64,7 @@ class PhpTheme implements FormThemeInterface
     {
         if ($attr['expanded']) {
             $html = '';
-            foreach ($attr['fields'] as $choice => $child) {
+            foreach ($attr['renderer'] as $choice => $child) {
                 $html .= $child->getWidget() . $child->getLabel() . PHP_EOL;
             }
         } else {
@@ -122,19 +122,19 @@ class PhpTheme implements FormThemeInterface
             return $this->text_widget($attr);
         } else {
             return str_replace(array('{{ year }}', '{{ month }}', '{{ day }}'), array(
-                $attr['fields']['year']->getWidget(),
-                $attr['fields']['month']->getWidget(),
-                $attr['fields']['day']->getWidget(),
+                $attr['renderer']['year']->getWidget(),
+                $attr['renderer']['month']->getWidget(),
+                $attr['renderer']['day']->getWidget(),
             ), $attr['date_pattern']);
         }
     }
 
     protected function datetime_widget($attr)
     {
-        return $attr['fields']['date']->getWidget() . " " . $attr['fields']['time']->getWidget() . PHP_EOL;
+        return $attr['renderer']['date']->getWidget() . " " . $attr['renderer']['time']->getWidget() . PHP_EOL;
     }
 
-    protected function errors($attr)
+    protected function field_errors($attr)
     {
         $html = '';
         if ($attr['errors']) {
@@ -149,17 +149,17 @@ class PhpTheme implements FormThemeInterface
 
     protected function file_widget($attr)
     {
-        $html = '<input type="file" ' . $this->attributes($attr['fields']['file']->getVars()) . '/>' . PHP_EOL;
-        $html .= $attr['fields']['token']->getWidget();
-        $html .= $attr['fields']['name']->getWidget();
+        $html = '<input type="file" ' . $this->attributes($attr['renderer']['file']->getVars()) . '/>' . PHP_EOL;
+        $html .= $attr['renderer']['token']->getWidget();
+        $html .= $attr['renderer']['name']->getWidget();
         return $html;
     }
 
     protected function form_widget($attr)
     {
         $html = '<div>' . $attr['renderer']->getErrors();
-        foreach ($attr['fields'] as $form) {
-            $html .= $form->getRow();
+        foreach ($attr['renderer'] as $child) {
+            $html .= $child->getRow();
         }
         $html .= $attr['renderer']->getRest();
         return $html;
@@ -181,7 +181,7 @@ class PhpTheme implements FormThemeInterface
         return $this->number_widget($attr);
     }
 
-    protected function label($attr)
+    protected function field_label($attr)
     {
         return '<label for="' . $this->escape($attr['id']) . '">'.$this->escape($attr['label']) . '</label>' . PHP_EOL;
     }
@@ -219,24 +219,24 @@ class PhpTheme implements FormThemeInterface
     protected function repeated_row($attr)
     {
         $html = '';
-        foreach ($attr['fields'] as $form) {
-            $html .= $form->getRow();
+        foreach ($attr['renderer'] as $child) {
+            $html .= $child->getRow();
         }
         return $html;
     }
 
-    protected function rest($attr)
+    protected function field_rest($attr)
     {
         $html = '';
-        foreach ($attr['fields'] as $form) {
-            if (!$form->isRendered()) {
-                $html .= $form->getRow();
+        foreach ($attr['renderer'] as $child) {
+            if (!$child->isRendered()) {
+                $html .= $child->getRow();
             }
         }
         return $html;
     }
 
-    protected function row($attr)
+    protected function field_row($attr)
     {
         return '<div>' . $attr['renderer']->getLabel() . $attr['renderer']->getErrors() . $attr['renderer']->getWidget() . '</div>' . PHP_EOL;
     }
@@ -265,10 +265,10 @@ class PhpTheme implements FormThemeInterface
 
     protected function time_widget($attr)
     {
-        $html = $attr['fields']['hour']->getWidget(array('size' => 1));
-        $html .=  ':' .$attr['fields']['minute']->getWidget(array('size' => 1));
+        $html = $attr['renderer']['hour']->getWidget(array('size' => 1));
+        $html .=  ':' .$attr['renderer']['minute']->getWidget(array('size' => 1));
         if ($attr['with_seconds']) {
-            $html .=  ':' .$attr['fields']['second']->getWidget(array('size' => 1));
+            $html .=  ':' .$attr['renderer']['second']->getWidget(array('size' => 1));
         }
         return $html . PHP_EOL;
     }

+ 0 - 1
src/Symfony/Component/Form/Type/FormType.php

@@ -52,7 +52,6 @@ class FormType extends AbstractType
         }
 
         $renderer->setVar('multipart', $multipart);
-        $renderer->setVar('fields', $renderer->getChildren());
     }
 
     public function getDefaultOptions(array $options)

+ 7 - 5
tests/Symfony/Tests/Component/Form/Renderer/ThemeRendererTest.php

@@ -38,16 +38,18 @@ class ThemeRendererTest extends \PHPUnit_Framework_TestCase
 
     public function testIterator()
     {
-        $themeFactory = $this->createThemeFactory();
+        $fields = array(
+            'foo' => $this->getMock('Symfony\Tests\Component\Form\FormInterface'),
+            'bar' => $this->getMock('Symfony\Tests\Component\Form\FormInterface'),
+        );
 
+        $themeFactory = $this->createThemeFactory();
         $renderer = new ThemeRenderer($themeFactory);
-        $renderer->setVar('fields', array('foo' => 'baz', 'bar' => 'baz'));
+        $renderer->setChildren($fields);
 
         $this->assertFalse($renderer->isRendered());
 
-        foreach ($renderer AS $child) {
-            $this->assertEquals('baz', $child);
-        }
+        $this->assertEquals($fields, iterator_to_array($renderer));
 
         $this->assertTrue($renderer->isRendered());
     }