Ver código fonte

[Form] Changed notion of 'parameter' to 'var' in the renderer. Merged vars and attributes into single array

Bernhard Schussek 14 anos atrás
pai
commit
ce432e939d

+ 25 - 33
src/Symfony/Bundle/TwigBundle/Resources/views/form.html.twig

@@ -36,18 +36,16 @@
 
 {% block attributes %}
 {% spaceless %}
-    {% for key, value in attr %}
-        {{ key }}="{{ value }}"
-    {% endfor %}
+    id="{{ id }}" name="{{ name }}"{% if class %} class="{{ class }}"{% endif %}{% if field.disabled %} disabled="disabled"{% endif %}{% if field.required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if size %} size="{{ size }}"{% endif %}
 {% endspaceless %}
 {% endblock attributes %}
 
-{% block field_attributes %}
+{% block widget %}
 {% spaceless %}
-    id="{{ id }}" name="{{ name }}"{% if field.disabled %} disabled="disabled"{% endif %}{% if field.required %} required="required"{% endif %}
-    {{ block('attributes') }}
+    {% set type = type|default('text') %}
+    <input type="{{ type }}" {{ block('attributes') }} value="{{ field.displayedData }}" />
 {% endspaceless %}
-{% endblock field_attributes %}
+{% endblock widget %}
 
 {% block form__widget %}
 {% spaceless %}
@@ -65,33 +63,28 @@
 
 {% block text__widget %}
 {% spaceless %}
-    {% if attr.type is defined and attr.type != "text" %}
-        <input {{ block('field_attributes') }} value="{{ field.displayedData }}" />
-    {% else %}
-        {% if attr.maxlength is not defined and max_length is defined %}
-            {% set attr = attr|merge({ 'maxlength': max_length }) %}
-        {% endif %}
-        <input type="text" {{ block('field_attributes') }} value="{{ field.displayedData }}" />
-    {% endif %}
+    {% set type = type|default('text') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock text__widget %}
 
 {% block password__widget %}
 {% spaceless %}
-    {% set attr = attr|merge({ 'maxlength': attr.maxlength|default(field.maxlength) }) %}
-    <input type="password" {{ block('field_attributes') }} value="{{ field.displayedData }}" />
+    {% set type = type|default('password') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock password__widget %}
 
 {% block hidden__widget %}
 {% spaceless %}
-    <input type="hidden" id="{{ id }}" name="{{ name }}"{% if field.disabled %} disabled="disabled"{% endif %} value="{{ field.displayedData }}" />
+    {% set type = type|default('hidden') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock hidden__widget %}
 
 {% block textarea__widget %}
 {% spaceless %}
-    <textarea {{ block('field_attributes') }}>{{ field.displayedData }}</textarea>
+    <textarea {{ block('attributes') }}>{{ field.displayedData }}</textarea>
 {% endspaceless %}
 {% endblock textarea__widget %}
 
@@ -119,7 +112,7 @@
             {{ child.renderer.label(choice_list.label(choice)) }}
         {% endfor %}
     {% else %}
-    <select {{ block('field_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
+    <select {{ block('attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
         {% if not field.required %}
             <option value="">{{ empty_value }}</option>
         {% endif %}
@@ -137,13 +130,13 @@
 
 {% block checkbox__widget %}
 {% spaceless %}
-    <input type="checkbox" {{ block('field_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if field.data %} checked="checked"{% endif %} />
+    <input type="checkbox" {{ block('attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if field.data %} checked="checked"{% endif %} />
 {% endspaceless %}
 {% endblock checkbox__widget %}
 
 {% block radio__widget %}
 {% spaceless %}
-    <input type="radio" {{ block('field_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if field.data %} checked="checked"{% endif %} />
+    <input type="radio" {{ block('attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if field.data %} checked="checked"{% endif %} />
 {% endspaceless %}
 {% endblock radio__widget %}
 
@@ -172,41 +165,40 @@
 
 {% block time__widget %}
 {% spaceless %}
-    {% if widget == 'text' %}{% set attr = attr|merge({ 'size': 1 }) %}{% endif %}
-    {{ field.hour.renderer.widget(attr) }}:{{ field.minute.renderer.widget(attr) }}{% if with_seconds %}:{{ field.second.renderer.widget(attr) }}{% endif %}
+    {{ field.hour.renderer.widget({ 'size': '1' }) }}:{{ field.minute.renderer.widget({ 'size': '1' }) }}{% if with_seconds %}:{{ field.second.renderer.widget({ 'size': '1' }) }}{% endif %}
 {% endspaceless %}
 {% endblock time__widget %}
 
 {% block number__widget %}
 {% spaceless %}
-    {% set attr = attr|merge({ 'type': 'number' }) %}
-    {{ block('text__widget') }}
+    {% set type = type|default('number') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock number__widget %}
 
 {% block integer__widget %}
 {% spaceless %}
-    {% set attr = attr|merge({ 'type': 'number' }) %}
-    {{ block('text__widget') }}
+    {% set type = type|default('number') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock integer__widget %}
 
 {% block money__widget %}
 {% spaceless %}
-    {{ money_pattern|replace({ '{{ widget }}': block('text__widget') })|raw }}
+    {{ money_pattern|replace({ '{{ widget }}': block('widget') })|raw }}
 {% endspaceless %}
 {% endblock money__widget %}
 
 {% block url__widget %}
 {% spaceless %}
-    {% set attr = attr|merge({ 'type': 'url' }) %}
-    {{ block('text__widget') }}
+    {% set type = type|default('url') %}
+    {{ block('widget') }}
 {% endspaceless %}
 {% endblock url__widget %}
 
 {% block percent__widget %}
 {% spaceless %}
-    {{ block('text__widget') }} %
+    {{ block('widget') }} %
 {% endspaceless %}
 {% endblock percent__widget %}
 
@@ -214,7 +206,7 @@
 {% spaceless %}
     {% set group = field %}
     {% set field = group.file %}
-    <input type="file" {{ block('field_attributes') }} />
+    <input type="file" {{ block('attributes') }} />
     {{ group.token.renderer.widget }}
     {{ group.original_name.renderer.widget }}
 {% endspaceless %}

+ 7 - 3
src/Symfony/Component/Form/Field.php

@@ -491,9 +491,6 @@ class Field extends Configurable implements FieldInterface
      */
     public function setRenderer(RendererInterface $renderer)
     {
-        $renderer->setParameter('field', $this);
-        $renderer->setParameter('label', ucfirst(strtolower(str_replace('_', ' ', $this->getKey()))));
-
         $this->renderer = $renderer;
 
         return $this;
@@ -516,6 +513,13 @@ class Field extends Configurable implements FieldInterface
         return $this;
     }
 
+    public function setRendererVar($name, $value)
+    {
+        $this->renderer->setVar($name, $value);
+
+        return $this;
+    }
+
     /**
      * Normalizes the value if a normalization transformer is set
      *

+ 21 - 13
src/Symfony/Component/Form/FormFactory.php

@@ -58,17 +58,25 @@ class FormFactory
         return $field
             ->setRenderer(new DefaultRenderer($this->theme, $template))
             ->addRendererPlugin(new IdPlugin($field))
-            ->addRendererPlugin(new NamePlugin($field));
+            ->addRendererPlugin(new NamePlugin($field))
+            ->setRendererVar('field', $field)
+            ->setRendererVar('class', null)
+            ->setRendererVar('max_length', null)
+            ->setRendererVar('size', null)
+            ->setRendererVar('label', ucfirst(strtolower(str_replace('_', ' ', $key))));
     }
 
     protected function getForm($key, $template)
     {
-        $field = new Form($key);
+        $form = new Form($key);
 
-        return $field
+        return $form
             ->setRenderer(new DefaultRenderer($this->theme, $template))
-            ->addRendererPlugin(new IdPlugin($field))
-            ->addRendererPlugin(new NamePlugin($field));
+            ->addRendererPlugin(new IdPlugin($form))
+            ->addRendererPlugin(new NamePlugin($form))
+            ->setRendererVar('field', $form)
+            ->setRendererVar('class', null)
+            ->setRendererVar('label', ucfirst(strtolower(str_replace('_', ' ', $key))));
     }
 
     public function getTextField($key, array $options = array())
@@ -78,7 +86,7 @@ class FormFactory
         ), $options);
 
         return $this->getField($key, 'text')
-            ->addRendererPlugin(new ParameterPlugin('max_length', $options['max_length']));
+            ->setRendererVar('max_length', $options['max_length']);
     }
 
     public function getHiddenField($key, array $options = array())
@@ -148,7 +156,7 @@ class FormFactory
 
         return $this->getField($key, 'checkbox')
             ->setValueTransformer(new BooleanToStringTransformer())
-            ->addRendererPlugin(new ParameterPlugin('value', $options['value']));
+            ->setRendererVar('value', $options['value']);
     }
 
     public function getRadioField($key, array $options = array())
@@ -162,7 +170,7 @@ class FormFactory
         return $field
             ->setValueTransformer(new BooleanToStringTransformer())
             ->addRendererPlugin(new ParentNamePlugin($field))
-            ->addRendererPlugin(new ParameterPlugin('value', $options['value']));
+            ->setRendererVar('value', $options['value']);
     }
 
     protected function getChoiceFieldForList($key, ChoiceListInterface $choiceList, array $options = array())
@@ -192,8 +200,8 @@ class FormFactory
         }
 
         $field->addRendererPlugin(new ChoicePlugin($choiceList))
-            ->addRendererPlugin(new ParameterPlugin('multiple', $options['multiple']))
-            ->addRendererPlugin(new ParameterPlugin('expanded', $options['expanded']));
+            ->setRendererVar('multiple', $options['multiple'])
+            ->setRendererVar('expanded', $options['expanded']);
 
         if ($options['multiple'] && $options['expanded']) {
             $field->setValueTransformer(new ArrayToChoicesTransformer($choiceList));
@@ -417,7 +425,7 @@ class FormFactory
             ));
         }
 
-        $field->addRendererPlugin(new ParameterPlugin('widget', $options['widget']));
+        $field->setRendererVar('widget', $options['widget']);
 
         return $field;
     }
@@ -489,8 +497,8 @@ class FormFactory
                 'pad' => $options['widget'] === 'text',
                 'fields' => $children,
             )))
-            ->addRendererPlugin(new ParameterPlugin('widget', $options['widget']))
-            ->addRendererPlugin(new ParameterPlugin('with_seconds', $options['with_seconds']));
+            ->setRendererVar('widget', $options['widget'])
+            ->setRendererVar('with_seconds', $options['with_seconds']);
 
         return $field;
     }

+ 19 - 20
src/Symfony/Component/Form/Renderer/DefaultRenderer.php

@@ -23,7 +23,7 @@ class DefaultRenderer implements RendererInterface
 
     private $theme;
 
-    private $parameters = array();
+    private $vars = array();
 
     private $plugins = array();
 
@@ -62,37 +62,37 @@ class DefaultRenderer implements RendererInterface
         $this->plugins[] = $plugin;
     }
 
-    public function setParameter($name, $value)
+    public function setVar($name, $value)
     {
-        $this->parameters[$name] = $value;
+        $this->vars[$name] = $value;
     }
 
-    public function getParameter($name)
+    public function getVar($name)
     {
         $this->setUpPlugins();
 
         // TODO exception handling
-        return $this->parameters[$name];
+        return $this->vars[$name];
     }
 
-    public function getWidget(array $attributes = array(), array $parameters = array())
+    public function getWidget(array $vars = array())
     {
-        return $this->render('widget', $attributes, $parameters);
+        return $this->render('widget', $vars);
     }
 
-    public function getErrors(array $attributes = array(), array $parameters = array())
+    public function getErrors(array $vars = array())
     {
-        return $this->render('errors', $attributes, $parameters);
+        return $this->render('errors', $vars);
     }
 
-    public function getRow(array $attributes = array(), array $parameters = array())
+    public function getRow(array $vars = array())
     {
-        return $this->render('row', $attributes, $parameters);
+        return $this->render('row', $vars);
     }
 
-    public function getHidden(array $attributes = array(), array $parameters = array())
+    public function getHidden(array $vars = array())
     {
-        return $this->render('hidden', $attributes, $parameters);
+        return $this->render('hidden', $vars);
     }
 
     /**
@@ -101,23 +101,22 @@ class DefaultRenderer implements RendererInterface
      * @param FieldInterface $field  The field to render the label for
      * @param array $params          Additional variables passed to the template
      */
-    public function getLabel($label = null, array $attributes = array(), array $parameters = array())
+    public function getLabel($label = null, array $vars = array())
     {
         if (null !== $label) {
-            $parameters['label'] = $label;
+            $vars['label'] = $label;
         }
 
-        return $this->render('label', $attributes, $parameters);
+        return $this->render('label', $vars);
     }
 
-    protected function render($block, array $attributes = array(), array $parameters = array())
+    protected function render($block, array $vars = array())
     {
         $this->setUpPlugins();
 
         return $this->theme->render($this->template, $block, array_replace(
-            array('attr' => $attributes),
-            $this->parameters,
-            $parameters
+            $this->vars,
+            $vars
         ));
     }
 }

+ 5 - 5
src/Symfony/Component/Form/Renderer/Plugin/ChoicePlugin.php

@@ -27,10 +27,10 @@ class ChoicePlugin implements PluginInterface
     {
         $choiceList = $this->choiceList;
 
-        $renderer->setParameter('choices', $this->choiceList->getOtherChoices());
-        $renderer->setParameter('preferred_choices', $this->choiceList->getPreferredChoices());
-        $renderer->setParameter('separator', '-------------------');
-        $renderer->setParameter('choice_list', $this->choiceList);
-        $renderer->setParameter('empty_value', '');
+        $renderer->setVar('choices', $this->choiceList->getOtherChoices());
+        $renderer->setVar('preferred_choices', $this->choiceList->getPreferredChoices());
+        $renderer->setVar('separator', '-------------------');
+        $renderer->setVar('choice_list', $this->choiceList);
+        $renderer->setVar('empty_value', '');
     }
 }

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/DatePatternPlugin.php

@@ -24,7 +24,7 @@ class DatePatternPlugin implements PluginInterface
 
     public function setUp(RendererInterface $renderer)
     {
-        $renderer->setParameter('date_pattern', $this->getPattern());
+        $renderer->setVar('date_pattern', $this->getPattern());
     }
 
     public function getPattern()

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/EnctypePlugin.php

@@ -34,6 +34,6 @@ class EnctypePlugin implements PluginInterface
      */
     public function setUp(RendererInterface $renderer)
     {
-        $renderer->setParameter('enctype', $this->field->isMultipart() ? 'enctype="multipart/form-data"' : '');
+        $renderer->setVar('enctype', $this->field->isMultipart() ? 'enctype="multipart/form-data"' : '');
     }
 }

+ 2 - 2
src/Symfony/Component/Form/Renderer/Plugin/IdPlugin.php

@@ -38,12 +38,12 @@ class IdPlugin implements PluginInterface
 
         if ($this->field->hasParent()) {
             $parentRenderer = $this->field->getParent()->getRenderer();
-            $parentId = $parentRenderer->getParameter('id');
+            $parentId = $parentRenderer->getVar('id');
             $id = sprintf('%s_%s', $parentId, $fieldKey);
         } else {
             $id = $fieldKey;
         }
 
-        $renderer->setParameter('id', $id);
+        $renderer->setVar('id', $id);
     }
 }

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/MaxLengthPlugin.php

@@ -34,6 +34,6 @@ class MaxLengthPlugin implements PluginInterface
      */
     public function setUp(RendererInterface $renderer)
     {
-        $renderer->setParameter('max_length', $this->maxLength);
+        $renderer->setVar('max_length', $this->maxLength);
     }
 }

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/MoneyPatternPlugin.php

@@ -26,7 +26,7 @@ class MoneyPatternPlugin implements PluginInterface
 
     public function setUp(RendererInterface $renderer)
     {
-        $renderer->setParameter('money_pattern', self::getPattern($this->currency));
+        $renderer->setVar('money_pattern', self::getPattern($this->currency));
     }
 
     /**

+ 2 - 2
src/Symfony/Component/Form/Renderer/Plugin/NamePlugin.php

@@ -38,12 +38,12 @@ class NamePlugin implements PluginInterface
 
         if ($this->field->hasParent()) {
             $parentRenderer = $this->field->getParent()->getRenderer();
-            $parentName = $parentRenderer->getParameter('name');
+            $parentName = $parentRenderer->getVar('name');
             $name = sprintf('%s[%s]', $parentName, $fieldKey);
         } else {
             $name = $fieldKey;
         }
 
-        $renderer->setParameter('name', $name);
+        $renderer->setVar('name', $name);
     }
 }

+ 0 - 32
src/Symfony/Component/Form/Renderer/Plugin/ParameterPlugin.php

@@ -1,32 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license infieldation, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Form\Renderer\Plugin;
-
-use Symfony\Component\Form\Renderer\RendererInterface;
-
-class ParameterPlugin implements PluginInterface
-{
-    private $name;
-
-    private $value;
-
-    public function __construct($name, $value)
-    {
-        $this->name = $name;
-        $this->value = $value;
-    }
-
-    public function setUp(RendererInterface $renderer)
-    {
-        $renderer->setParameter($this->name, $this->value);
-    }
-}

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/ParentNamePlugin.php

@@ -36,7 +36,7 @@ class ParentNamePlugin implements PluginInterface
     {
         if ($this->field->hasParent()) {
             $parentRenderer = $this->field->getParent()->getRenderer();
-            $renderer->setParameter('name', $parentRenderer->getParameter('name'));
+            $renderer->setVar('name', $parentRenderer->getVar('name'));
         }
     }
 }

+ 1 - 1
src/Symfony/Component/Form/Renderer/Plugin/SelectMultipleNamePlugin.php

@@ -23,6 +23,6 @@ class SelectMultipleNamePlugin extends NamePlugin
         // Add "[]" to the name in case a select tag with multiple options is
         // displayed. Otherwise only one of the selected options is sent in the
         // POST request.
-        $renderer->setParameter('name', $renderer->getParameter('name').'[]');
+        $renderer->setVar('name', $renderer->getVar('name').'[]');
     }
 }

+ 8 - 6
src/Symfony/Component/Form/Renderer/RendererInterface.php

@@ -13,15 +13,17 @@ namespace Symfony\Component\Form\Renderer;
 
 interface RendererInterface
 {
-    function setParameter($name, $value);
+    function setVar($name, $value);
 
-    function getWidget(array $attributes = array(), array $parameters = array());
+    function getVar($name);
 
-    function getErrors(array $attributes = array(), array $parameters = array());
+    function getWidget(array $vars = array());
 
-    function getRow(array $attributes = array(), array $parameters = array());
+    function getErrors(array $vars = array());
 
-    function getHidden(array $attributes = array(), array $parameters = array());
+    function getRow(array $vars = array());
+
+    function getHidden(array $vars = array());
 
     /**
      * Renders the label of the given field
@@ -29,5 +31,5 @@ interface RendererInterface
      * @param FieldInterface $field  The field to render the label for
      * @param array $params          Additional variables passed to the template
      */
-    function getLabel($label = null, array $attributes = array(), array $parameters = array());
+    function getLabel($label = null, array $vars = array());
 }