From f541a54770b7b609650abad08171d342938f057c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Sat, 9 Jun 2012 14:22:15 +0200 Subject: [PATCH] [Form] implement force append / prepend --- UPGRADE-2.1.md | 6 ++--- .../Doctrine/Form/Type/DoctrineType.php | 2 +- .../Bridge/Propel1/Form/Type/ModelType.php | 2 +- src/Symfony/Component/Form/FormConfig.php | 24 +++++++++++-------- .../Form/FormConfigEditorInterface.php | 10 ++++---- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/UPGRADE-2.1.md b/UPGRADE-2.1.md index 8f7d45bd74..02b230ed44 100644 --- a/UPGRADE-2.1.md +++ b/UPGRADE-2.1.md @@ -628,12 +628,12 @@ * The following methods in `FormBuilder` were deprecated and have a new equivalent: - * `prependClientTransformer`: no new equivalent, consider using `addViewTransformer` + * `prependClientTransformer`: `addViewTransformer`, with `true` as second argument * `appendClientTransformer`: `addViewTransformer` * `getClientTransformers`: `getViewTransformers` * `resetClientTransformers`: `resetViewTransformers` * `prependNormTransformer`: `addModelTransformer` - * `appendNormTransformer`: no new equivalent, consider using `addModelTransformer` + * `appendNormTransformer`: `addModelTransformer`, with `true` as second argument * `getNormTransformers`: `getModelTransformers` * `resetNormTransformers`: `resetModelTransformers` @@ -643,7 +643,7 @@ Before: ``` - $builder->prependClientTransformer(new MyTransformer()); + $builder->appendClientTransformer(new MyTransformer()); ``` After: diff --git a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php index cdec0e710b..f94e10e9e7 100644 --- a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php +++ b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php @@ -39,7 +39,7 @@ abstract class DoctrineType extends AbstractType if ($options['multiple']) { $builder ->addEventSubscriber(new MergeDoctrineCollectionListener()) - ->prependClientTransformer(new CollectionToArrayTransformer()) + ->addViewTransformer(new CollectionToArrayTransformer(), true) ; } } diff --git a/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php b/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php index 8e5c151f66..f509dca02c 100644 --- a/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php +++ b/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php @@ -28,7 +28,7 @@ class ModelType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { if ($options['multiple']) { - $builder->prependClientTransformer(new CollectionToArrayTransformer()); + $builder->addViewTransformer(new CollectionToArrayTransformer(), true); } } diff --git a/src/Symfony/Component/Form/FormConfig.php b/src/Symfony/Component/Form/FormConfig.php index 9c0c6c91eb..ee173695ae 100644 --- a/src/Symfony/Component/Form/FormConfig.php +++ b/src/Symfony/Component/Form/FormConfig.php @@ -179,9 +179,13 @@ class FormConfig implements FormConfigEditorInterface /** * {@inheritdoc} */ - public function addViewTransformer(DataTransformerInterface $viewTransformer) + public function addViewTransformer(DataTransformerInterface $viewTransformer, $forcePrepend = false) { - $this->viewTransformers[] = $viewTransformer; + if ($forcePrepend) { + array_unshift($this->viewTransformers, $viewTransformer); + } else { + $this->viewTransformers[] = $viewTransformer; + } return $this; } @@ -222,9 +226,7 @@ class FormConfig implements FormConfigEditorInterface */ public function prependClientTransformer(DataTransformerInterface $viewTransformer) { - array_unshift($this->viewTransformers, $viewTransformer); - - return $this; + return $this->addViewTransformer($viewTransformer, true); } /** @@ -243,9 +245,13 @@ class FormConfig implements FormConfigEditorInterface /** * {@inheritdoc} */ - public function addModelTransformer(DataTransformerInterface $modelTransformer) + public function addModelTransformer(DataTransformerInterface $modelTransformer, $forceAppend = false) { - array_unshift($this->modelTransformers, $modelTransformer); + if ($forceAppend) { + $this->modelTransformers[] = $modelTransformer; + } else { + array_unshift($this->modelTransformers, $modelTransformer); + } return $this; } @@ -271,9 +277,7 @@ class FormConfig implements FormConfigEditorInterface */ public function appendNormTransformer(DataTransformerInterface $modelTransformer) { - $this->modelTransformers[] = $modelTransformer; - - return $this; + return $this->addModelTransformer($modelTransformer, true); } /** diff --git a/src/Symfony/Component/Form/FormConfigEditorInterface.php b/src/Symfony/Component/Form/FormConfigEditorInterface.php index 79135ca525..0176d7f814 100644 --- a/src/Symfony/Component/Form/FormConfigEditorInterface.php +++ b/src/Symfony/Component/Form/FormConfigEditorInterface.php @@ -52,7 +52,7 @@ interface FormConfigEditorInterface extends FormConfigInterface function addValidator(FormValidatorInterface $validator); /** - * Appends a transformer to the view transformer chain. + * Appends / prepends a transformer to the view transformer chain. * * The transform method of the transformer is used to convert data from the * normalized to the view format. @@ -60,10 +60,11 @@ interface FormConfigEditorInterface extends FormConfigInterface * view to the normalized format. * * @param DataTransformerInterface $viewTransformer + * @param Boolean $forcePrepend if set to true, prepend instead of appending * * @return self The configuration object. */ - function addViewTransformer(DataTransformerInterface $viewTransformer); + function addViewTransformer(DataTransformerInterface $viewTransformer, $forcePrepend = false); /** * Clears the view transformers. @@ -73,7 +74,7 @@ interface FormConfigEditorInterface extends FormConfigInterface function resetViewTransformers(); /** - * Prepends a transformer to the normalization transformer chain. + * Prepends / appends a transformer to the normalization transformer chain. * * The transform method of the transformer is used to convert data from the * model to the normalized format. @@ -81,10 +82,11 @@ interface FormConfigEditorInterface extends FormConfigInterface * normalized to the model format. * * @param DataTransformerInterface $modelTransformer + * @param Boolean $forceAppend if set to true, append instead of prepending * * @return self The configuration object. */ - function addModelTransformer(DataTransformerInterface $modelTransformer); + function addModelTransformer(DataTransformerInterface $modelTransformer, $forceAppend = false); /** * Clears the normalization transformers.