Bladeren bron

[Form] Moved trimming logic to listener

Bernhard Schussek 14 jaren geleden
bovenliggende
commit
caa49aa841

+ 5 - 1
src/Symfony/Component/Form/Config/FieldConfig.php

@@ -17,6 +17,7 @@ use Symfony\Component\Form\FormFactoryInterface;
 use Symfony\Component\Form\Renderer\DefaultRenderer;
 use Symfony\Component\Form\Renderer\Theme\ThemeInterface;
 use Symfony\Component\Form\Renderer\Plugin\FieldPlugin;
+use Symfony\Component\Form\EventListener\TrimListener;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 
 class FieldConfig extends AbstractFieldConfig
@@ -35,7 +36,6 @@ class FieldConfig extends AbstractFieldConfig
         $field->setPropertyPath($options['property_path'] === false
                     ? $field->getKey()
                     : $options['property_path'])
-            ->setTrim($options['trim'])
             ->setRequired($options['required'])
             ->setDisabled($options['disabled'])
             ->setValueTransformer($options['value_transformer'])
@@ -47,6 +47,10 @@ class FieldConfig extends AbstractFieldConfig
             ->setRendererVar('max_length', null)
             ->setRendererVar('size', null)
             ->setRendererVar('label', ucfirst(strtolower(str_replace('_', ' ', $field->getKey()))));
+
+        if ($options['trim']) {
+            $field->addEventSubscriber(new TrimListener());
+        }
     }
 
     public function getDefaultOptions(array $options)

+ 38 - 0
src/Symfony/Component/Form/EventListener/TrimListener.php

@@ -0,0 +1,38 @@
+<?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\EventListener;
+
+use Symfony\Component\Form\Events;
+use Symfony\Component\Form\Event\FilterDataEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Trims string data
+ *
+ * @author Bernhard Schussek <bernhard.schussek@symfony-project.com>
+ */
+class TrimListener implements EventSubscriberInterface
+{
+    public function filterBoundDataFromClient(FilterDataEvent $event)
+    {
+        $data = $event->getData();
+
+        if (is_string($data)) {
+            $event->setData(trim($data));
+        }
+    }
+
+    public static function getSubscribedEvents()
+    {
+        return Events::filterBoundDataFromClient;
+    }
+}

+ 0 - 16
src/Symfony/Component/Form/Field.php

@@ -313,10 +313,6 @@ class Field implements FieldInterface
         $event = new DataEvent($clientData);
         $this->dispatcher->dispatchEvent(Events::preBind, $event);
 
-        if (is_string($clientData) && $this->trim) {
-            $clientData = trim($clientData);
-        }
-
         $appData = null;
         $normData = null;
 
@@ -485,18 +481,6 @@ class Field implements FieldInterface
         return $this->valueTransformer;
     }
 
-    public function setTrim($trim)
-    {
-        $this->trim = $trim;
-
-        return $this;
-    }
-
-    public function getTrim()
-    {
-        return $this->trim;
-    }
-
     /**
      * Sets the renderer
      *