Jelajahi Sumber

[Form] Refactored DateField pattern, fixed maxlength in TextField

Bernhard Schussek 14 tahun lalu
induk
melakukan
861ff957e7

+ 8 - 2
src/Symfony/Bundle/TwigBundle/Resources/views/form.html.twig

@@ -68,7 +68,9 @@
     {% if attr.type is defined and attr.type != "text" %}
         <input {{ block('field_attributes') }} value="{{ field.displayedData }}" />
     {% else %}
-        {% set attr = attr|merge({ 'maxlength': attr.maxlength|default(max_length) }) %}
+        {% 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 %}
 {% endspaceless %}
@@ -156,7 +158,11 @@
     {% if field.isField %}
         {{ block('text__widget') }}
     {% else %}
-        {{ field.pattern|replace({ '{{ year }}': field.year.renderer.widget, '{{ month }}': field.month.renderer.widget, '{{ day }}': field.day.renderer.widget })|raw }}
+        {{ date_pattern|replace({ 
+            '{{ year }}': field.year.renderer.widget, 
+            '{{ month }}': field.month.renderer.widget, 
+            '{{ day }}': field.day.renderer.widget 
+        })|raw }}
     {% endif %}
 {% endspaceless %}
 {% endblock date__widget %}

+ 3 - 14
src/Symfony/Component/Form/DateField.php

@@ -179,21 +179,10 @@ class DateField extends HybridField
         }
     }
 
-    public function getPattern()
+    // temporary
+    public function getFormatter()
     {
-        // set order as specified in the pattern
-        if ($this->getOption('pattern')) {
-            return $this->getOption('pattern');
-        }
-
-        // set right order with respect to locale (e.g.: de_DE=dd.MM.yy; en_US=M/d/yy)
-        // lookup various formats at http://userguide.icu-project.org/formatparse/datetime
-        if (preg_match('/^([yMd]+).+([yMd]+).+([yMd]+)$/', $this->formatter->getPattern())) {
-            return preg_replace(array('/y+/', '/M+/', '/d+/'), array('{{ year }}', '{{ month }}', '{{ day }}'), $this->formatter->getPattern());
-        }
-
-        // default fallback
-        return '{{ year }}-{{ month }}-{{ day }}';
+        return $this->formatter;
     }
 
     /**

+ 2 - 1
src/Symfony/Component/Form/FieldFactory/FieldFactory.php

@@ -73,7 +73,8 @@ class FieldFactory implements FieldFactoryInterface
         $textField = 'Symfony\Component\Form\TextField';
 
         if ($maxLengthGuess && ($fieldClass == $textField || is_subclass_of($fieldClass, $textField))) {
-            $options = array_merge(array('max_length' => $maxLengthGuess->getValue()), $options);
+// TODO enable me again later
+//            $options = array_merge(array('max_length' => $maxLengthGuess->getValue()), $options);
         }
 
         if ($requiredGuess) {

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

@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, 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 DatePatternPlugin implements PluginInterface
+{
+    private $formatter;
+
+    public function __construct(\IntlDateFormatter $formatter)
+    {
+        $this->formatter = $formatter;
+    }
+
+    public function setUp(RendererInterface $renderer)
+    {
+        $renderer->setParameter('date_pattern', $this->getPattern());
+    }
+
+    public function getPattern()
+    {
+//        // set order as specified in the pattern
+//        if ($this->getOption('pattern')) {
+//            return $this->getOption('pattern');
+//        }
+
+        $pattern = $this->formatter->getPattern();
+
+        // set right order with respect to locale (e.g.: de_DE=dd.MM.yy; en_US=M/d/yy)
+        // lookup various formats at http://userguide.icu-project.org/formatparse/datetime
+        if (preg_match('/^([yMd]+).+([yMd]+).+([yMd]+)$/', $pattern)) {
+            return preg_replace(array('/y+/', '/M+/', '/d+/'), array('{{ year }}', '{{ month }}', '{{ day }}'), $pattern);
+        }
+
+        // default fallback
+        return '{{ year }}-{{ month }}-{{ day }}';
+    }
+}