diff --git a/UPGRADE-2.1.md b/UPGRADE-2.1.md index f38646a03606..edffe5d44eff 100644 --- a/UPGRADE-2.1.md +++ b/UPGRADE-2.1.md @@ -467,8 +467,10 @@ * `getClientTransformers` * `getAttribute` * `hasAttribute` + * `getClientData` - You can access these methods on the `FormConfigInterface` object instead. + The method `getClientData` has a new equivalent that is named `getViewData`. + You can access all other methods on the `FormConfigInterface` object instead. Before: @@ -643,6 +645,31 @@ public function buildView(FormViewInterface $view, FormInterface $form, array $options) public function buildViewBottomUp(FormViewInterface $view, FormInterface $form, array $options) ``` + + * The following methods in `FormBuilder` were deprecated and have a new equivalent: + + * `prependClientTransformer`: `addViewTransformer` + * `appendClientTransformer`: no new equivalent, should not be used + * `getClientTransformers`: `getViewTransformers` + * `resetClientTransformers`: `resetViewTransformers` + * `prependNormTransformer`: no new equivalent, should not be used + * `appendNormTransformer`: `addModelTransformer` + * `getNormTransformers`: `getModelTransformers` + * `resetNormTransformers`: `resetModelTransformers` + + The deprecated methods will be removed in Symfony 2.3. You are advised to update your application. + + Before: + + ``` + $builder->prependClientTransformer(new MyTransformer()); + ``` + + After: + + ``` + $builder->addViewTransformer(new MyTransformer()); + ``` ### Validator diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 16dc520aa96c..64ef100bcfc0 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -75,6 +75,7 @@ CHANGELOG * errors are not mapped to unsynchronized forms anymore * [BC BREAK] changed Form constructor to accept a single `FormConfigInterface` object * [BC BREAK] changed argument order in the FormBuilder constructor + * added Form method `getViewData` * deprecated Form methods * `getTypes` * `getErrorBubbling` @@ -82,6 +83,23 @@ CHANGELOG * `getClientTransformers` * `getAttribute` * `hasAttribute` + * `getClientData` + * added FormBuilder methods + * `addViewTransformer` + * `getViewTransformers` + * `resetViewTransformers` + * `addModelTransformer` + * `getModelTransformers` + * `resetModelTransformers` + * deprecated FormBuilder methods + * `prependClientTransformer` + * `appendClientTransformer` + * `getClientTransformers` + * `resetClientTransformers` + * `prependNormTransformer` + * `appendNormTransformer` + * `getNormTransformers` + * `resetNormTransformers` * deprecated the option "validation_constraint" in favor of the new option "constraints" * removed superfluous methods from DataMapperInterface diff --git a/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php b/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php index 3b8d6d53b1d7..962ba759639d 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php @@ -26,7 +26,7 @@ class CheckboxType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->appendClientTransformer(new BooleanToStringTransformer($options['value'])) + ->addViewTransformer(new BooleanToStringTransformer($options['value'])) ; } @@ -37,7 +37,7 @@ public function buildView(FormViewInterface $view, FormInterface $form, array $o { $view ->set('value', $options['value']) - ->set('checked', null !== $form->getClientData()) + ->set('checked', null !== $form->getViewData()) ; } diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php index c89404f346ab..086480a9a979 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php @@ -46,20 +46,20 @@ public function buildForm(FormBuilderInterface $builder, array $options) if ($options['multiple']) { $builder - ->appendClientTransformer(new ChoicesToBooleanArrayTransformer($options['choice_list'])) + ->addViewTransformer(new ChoicesToBooleanArrayTransformer($options['choice_list'])) ->addEventSubscriber(new FixCheckboxInputListener($options['choice_list']), 10) ; } else { $builder - ->appendClientTransformer(new ChoiceToBooleanArrayTransformer($options['choice_list'])) + ->addViewTransformer(new ChoiceToBooleanArrayTransformer($options['choice_list'])) ->addEventSubscriber(new FixRadioInputListener($options['choice_list']), 10) ; } } else { if ($options['multiple']) { - $builder->appendClientTransformer(new ChoicesToValuesTransformer($options['choice_list'])); + $builder->addViewTransformer(new ChoicesToValuesTransformer($options['choice_list'])); } else { - $builder->appendClientTransformer(new ChoiceToValueTransformer($options['choice_list'])); + $builder->addViewTransformer(new ChoiceToValueTransformer($options['choice_list'])); } } diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index 141580639284..614bb49167b5 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -43,7 +43,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) } if ('single_text' === $options['widget']) { - $builder->appendClientTransformer(new DateTimeToStringTransformer($options['data_timezone'], $options['user_timezone'], $format)); + $builder->addViewTransformer(new DateTimeToStringTransformer($options['data_timezone'], $options['user_timezone'], $format)); } else { // Only pass a subset of the options to children $dateOptions = array_intersect_key($options, array_flip(array( @@ -86,7 +86,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) $timeOptions['input'] = 'array'; $builder - ->appendClientTransformer(new DataTransformerChain(array( + ->addViewTransformer(new DataTransformerChain(array( new DateTimeToArrayTransformer($options['data_timezone'], $options['user_timezone'], $parts), new ArrayToPartsTransformer(array( 'date' => array('year', 'month', 'day'), diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index aa35798f71c5..b945fa25e701 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -63,7 +63,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ); if ('single_text' === $options['widget']) { - $builder->appendClientTransformer(new DateTimeToLocalizedStringTransformer($options['data_timezone'], $options['user_timezone'], $format, \IntlDateFormatter::NONE, \IntlDateFormatter::GREGORIAN, $pattern)); + $builder->addViewTransformer(new DateTimeToLocalizedStringTransformer($options['data_timezone'], $options['user_timezone'], $format, \IntlDateFormatter::NONE, \IntlDateFormatter::GREGORIAN, $pattern)); } else { $yearOptions = $monthOptions = $dayOptions = array(); @@ -110,7 +110,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('year', $options['widget'], $yearOptions) ->add('month', $options['widget'], $monthOptions) ->add('day', $options['widget'], $dayOptions) - ->appendClientTransformer(new DateTimeToArrayTransformer( + ->addViewTransformer(new DateTimeToArrayTransformer( $options['data_timezone'], $options['user_timezone'], array('year', 'month', 'day') )) ; diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php index 106dd396319a..ad8738599ad0 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php @@ -97,7 +97,7 @@ public function buildView(FormViewInterface $view, FormInterface $form, array $o ->set('read_only', $readOnly) ->set('errors', $form->getErrors()) ->set('valid', $form->isBound() ? $form->isValid() : true) - ->set('value', $form->getClientData()) + ->set('value', $form->getViewData()) ->set('disabled', $form->isDisabled()) ->set('required', $form->isRequired()) ->set('max_length', $options['max_length']) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php index 3525e8d42df6..76ad3e333202 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php @@ -23,7 +23,7 @@ class IntegerType extends AbstractType */ public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->appendClientTransformer( + $builder->addViewTransformer( new IntegerToLocalizedStringTransformer( $options['precision'], $options['grouping'], diff --git a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php index 36c5b1f6c1a5..375023291038 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php @@ -28,7 +28,7 @@ class MoneyType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->appendClientTransformer(new MoneyToLocalizedStringTransformer( + ->addViewTransformer(new MoneyToLocalizedStringTransformer( $options['precision'], $options['grouping'], null, diff --git a/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php b/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php index 8dfc7cc991e3..d87f3a681fc7 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php @@ -23,7 +23,7 @@ class NumberType extends AbstractType */ public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->appendClientTransformer(new NumberToLocalizedStringTransformer( + $builder->addViewTransformer(new NumberToLocalizedStringTransformer( $options['precision'], $options['grouping'], $options['rounding_mode'] diff --git a/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php b/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php index db0c83504096..06320bf9eef0 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php @@ -23,7 +23,7 @@ class PercentType extends AbstractType */ public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->appendClientTransformer(new PercentToLocalizedStringTransformer($options['precision'], $options['type'])); + $builder->addViewTransformer(new PercentToLocalizedStringTransformer($options['precision'], $options['type'])); } /** diff --git a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php index b30c2eff0e48..d8104cf681e2 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php @@ -29,7 +29,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) $options['second_options']['required'] = $options['required']; $builder - ->appendClientTransformer(new ValueToDuplicatesTransformer(array( + ->addViewTransformer(new ValueToDuplicatesTransformer(array( $options['first_name'], $options['second_name'], ))) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TextType.php b/src/Symfony/Component/Form/Extension/Core/Type/TextType.php index 5d59c3bf8851..d6d86aa4e087 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TextType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TextType.php @@ -24,7 +24,7 @@ class TextType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->appendClientTransformer(new ValueToStringTransformer()) + ->addViewTransformer(new ValueToStringTransformer()) ; } diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php index 54262be5c774..511a5f35cab1 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php @@ -37,7 +37,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) } if ('single_text' === $options['widget']) { - $builder->appendClientTransformer(new DateTimeToStringTransformer($options['data_timezone'], $options['user_timezone'], $format)); + $builder->addViewTransformer(new DateTimeToStringTransformer($options['data_timezone'], $options['user_timezone'], $format)); } else { $hourOptions = $minuteOptions = $secondOptions = array(); @@ -92,7 +92,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) $builder->add('second', $options['widget'], $secondOptions); } - $builder->appendClientTransformer(new DateTimeToArrayTransformer($options['data_timezone'], $options['user_timezone'], $parts, 'text' === $options['widget'])); + $builder->addViewTransformer(new DateTimeToArrayTransformer($options['data_timezone'], $options['user_timezone'], $parts, 'text' === $options['widget'])); } if ('string' === $options['input']) { diff --git a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php index 3c46271e84c1..6424ba4087b1 100644 --- a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php +++ b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php @@ -80,15 +80,15 @@ public function validate($form, Constraint $constraint) } } } else { - $clientDataAsString = is_scalar($form->getClientData()) - ? (string) $form->getClientData() - : gettype($form->getClientData()); + $clientDataAsString = is_scalar($form->getViewData()) + ? (string) $form->getViewData() + : gettype($form->getViewData()); // Mark the form with an error if it is not synchronized $this->context->addViolation( $config->getOption('invalid_message'), array('{{ value }}' => $clientDataAsString), - $form->getClientData(), + $form->getViewData(), null, Form::ERR_INVALID ); diff --git a/src/Symfony/Component/Form/Form.php b/src/Symfony/Component/Form/Form.php index 841bb882e557..28c149515846 100644 --- a/src/Symfony/Component/Form/Form.php +++ b/src/Symfony/Component/Form/Form.php @@ -89,10 +89,10 @@ class Form implements \IteratorAggregate, FormInterface private $bound = false; /** - * The form data in application format + * The form data in model format * @var mixed */ - private $appData; + private $modelData; /** * The form data in normalized format @@ -101,10 +101,10 @@ class Form implements \IteratorAggregate, FormInterface private $normData; /** - * The form data in client format + * The form data in view format * @var mixed */ - private $clientData; + private $viewData; /** * The bound values that don't belong to any children @@ -113,7 +113,7 @@ class Form implements \IteratorAggregate, FormInterface private $extraData = array(); /** - * Whether the data in application, normalized and client format is + * Whether the data in model, normalized and view format is * synchronized. Data may not be synchronized if transformation errors * occur. * @var Boolean @@ -315,75 +315,75 @@ public function getAttribute($name) /** * Updates the form with default data. * - * @param array $appData The data formatted as expected for the underlying object + * @param array $modelData The data formatted as expected for the underlying object * * @return Form The current form */ - public function setData($appData) + public function setData($modelData) { if ($this->bound) { throw new AlreadyBoundException('You cannot change the data of a bound form'); } - if (is_object($appData) && !$this->config->getByReference()) { - $appData = clone $appData; + if (is_object($modelData) && !$this->config->getByReference()) { + $modelData = clone $modelData; } - $event = new DataEvent($this, $appData); + $event = new DataEvent($this, $modelData); $this->config->getEventDispatcher()->dispatch(FormEvents::PRE_SET_DATA, $event); // Hook to change content of the data - $event = new FilterDataEvent($this, $appData); + $event = new FilterDataEvent($this, $modelData); $this->config->getEventDispatcher()->dispatch(FormEvents::SET_DATA, $event); - $appData = $event->getData(); + $modelData = $event->getData(); // Treat data as strings unless a value transformer exists - if (!$this->config->getClientTransformers() && !$this->config->getNormTransformers() && is_scalar($appData)) { - $appData = (string) $appData; + if (!$this->config->getViewTransformers() && !$this->config->getModelTransformers() && is_scalar($modelData)) { + $modelData = (string) $modelData; } // Synchronize representations - must not change the content! - $normData = $this->appToNorm($appData); - $clientData = $this->normToClient($normData); + $normData = $this->modelToNorm($modelData); + $viewData = $this->normToView($normData); - // Validate if client data matches data class (unless empty) - if (!empty($clientData)) { + // Validate if view data matches data class (unless empty) + if (!empty($viewData)) { $dataClass = $this->config->getDataClass(); - if (null === $dataClass && is_object($clientData) && !$clientData instanceof \ArrayAccess) { + if (null === $dataClass && is_object($viewData) && !$viewData instanceof \ArrayAccess) { $expectedType = 'scalar, array or an instance of \ArrayAccess'; throw new FormException( - 'The form\'s client data is expected to be of type ' . $expectedType . ', ' . - 'but is an instance of class ' . get_class($clientData) . '. You ' . + 'The form\'s view data is expected to be of type ' . $expectedType . ', ' . + 'but is an instance of class ' . get_class($viewData) . '. You ' . 'can avoid this error by setting the "data_class" option to ' . - '"' . get_class($clientData) . '" or by adding a client transformer ' . - 'that transforms ' . get_class($clientData) . ' to ' . $expectedType . '.' + '"' . get_class($viewData) . '" or by adding a view transformer ' . + 'that transforms ' . get_class($viewData) . ' to ' . $expectedType . '.' ); } - if (null !== $dataClass && !$clientData instanceof $dataClass) { + if (null !== $dataClass && !$viewData instanceof $dataClass) { throw new FormException( - 'The form\'s client data is expected to be an instance of class ' . - $dataClass . ', but has the type ' . gettype($clientData) . '. You ' . + 'The form\'s view data is expected to be an instance of class ' . + $dataClass . ', but has the type ' . gettype($viewData) . '. You ' . 'can avoid this error by setting the "data_class" option to ' . - 'null or by adding a client transformer that transforms ' . - gettype($clientData) . ' to ' . $dataClass . '.' + 'null or by adding a view transformer that transforms ' . + gettype($viewData) . ' to ' . $dataClass . '.' ); } } - $this->appData = $appData; + $this->modelData = $modelData; $this->normData = $normData; - $this->clientData = $clientData; + $this->viewData = $viewData; $this->synchronized = true; if (count($this->children) > 0 && $this->config->getDataMapper()) { // Update child forms from the data - $this->config->getDataMapper()->mapDataToForms($clientData, $this->children); + $this->config->getDataMapper()->mapDataToForms($viewData, $this->children); } - $event = new DataEvent($this, $appData); + $event = new DataEvent($this, $modelData); $this->config->getEventDispatcher()->dispatch(FormEvents::POST_SET_DATA, $event); return $this; @@ -396,7 +396,7 @@ public function setData($appData) */ public function getData() { - return $this->appData; + return $this->modelData; } /** @@ -404,9 +404,22 @@ public function getData() * * @return string */ + public function getViewData() + { + return $this->viewData; + } + + /** + * Alias of {@link getViewData()}. + * + * @return string + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link getViewData()} instead. + */ public function getClientData() { - return $this->clientData; + return $this->getViewData(); } /** @@ -422,13 +435,13 @@ public function getExtraData() /** * Binds data to the form, transforms and validates it. * - * @param string|array $clientData The data + * @param string|array $submittedData The data * * @return Form The current form * * @throws UnexpectedTypeException */ - public function bind($clientData) + public function bind($submittedData) { if ($this->bound) { throw new AlreadyBoundException('A form can only be bound once'); @@ -444,43 +457,46 @@ public function bind($clientData) // whether an empty value has been submitted or whether no value has // been submitted at all. This is important for processing checkboxes // and radio buttons with empty values. - if (is_scalar($clientData)) { - $clientData = (string) $clientData; + if (is_scalar($submittedData)) { + $submittedData = (string) $submittedData; } // Initialize errors in the very beginning so that we don't lose any // errors added during listeners $this->errors = array(); - $event = new DataEvent($this, $clientData); + $event = new DataEvent($this, $submittedData); $this->config->getEventDispatcher()->dispatch(FormEvents::PRE_BIND, $event); - $appData = null; + $modelData = null; $normData = null; $extraData = array(); $synchronized = false; // Hook to change content of the data bound by the browser - $event = new FilterDataEvent($this, $clientData); + $event = new FilterDataEvent($this, $submittedData); $this->config->getEventDispatcher()->dispatch(FormEvents::BIND_CLIENT_DATA, $event); - $clientData = $event->getData(); + $submittedData = $event->getData(); + + // Build the data in the view format + $viewData = $submittedData; if (count($this->children) > 0) { - if (null === $clientData || '' === $clientData) { - $clientData = array(); + if (null === $viewData || '' === $viewData) { + $viewData = array(); } - if (!is_array($clientData)) { - throw new UnexpectedTypeException($clientData, 'array'); + if (!is_array($viewData)) { + throw new UnexpectedTypeException($viewData, 'array'); } foreach ($this->children as $name => $child) { - if (!isset($clientData[$name])) { - $clientData[$name] = null; + if (!isset($viewData[$name])) { + $viewData[$name] = null; } } - foreach ($clientData as $name => $value) { + foreach ($viewData as $name => $value) { if ($this->has($name)) { $this->children[$name]->bind($value); } else { @@ -488,31 +504,32 @@ public function bind($clientData) } } - // If we have a data mapper, use old client data and merge + // If we have a data mapper, use old view data and merge // data from the children into it later if ($this->config->getDataMapper()) { - $clientData = $this->getClientData(); + $viewData = $this->getViewData(); } } - if (null === $clientData || '' === $clientData) { + if (null === $viewData || '' === $viewData) { $emptyData = $this->config->getEmptyData(); if ($emptyData instanceof \Closure) { - $emptyData = $emptyData($this, $clientData); + /* @var \Closure $emptyData */ + $emptyData = $emptyData($this, $viewData); } - $clientData = $emptyData; + $viewData = $emptyData; } - // Merge form data from children into existing client data - if (count($this->children) > 0 && $this->config->getDataMapper() && null !== $clientData) { - $this->config->getDataMapper()->mapFormsToData($this->children, $clientData); + // Merge form data from children into existing view data + if (count($this->children) > 0 && $this->config->getDataMapper() && null !== $viewData) { + $this->config->getDataMapper()->mapFormsToData($this->children, $viewData); } try { // Normalize data to unified representation - $normData = $this->clientToNorm($clientData); + $normData = $this->viewToNorm($viewData); $synchronized = true; } catch (TransformationFailedException $e) { } @@ -525,18 +542,18 @@ public function bind($clientData) $normData = $event->getData(); // Synchronize representations - must not change the content! - $appData = $this->normToApp($normData); - $clientData = $this->normToClient($normData); + $modelData = $this->normToModel($normData); + $viewData = $this->normToView($normData); } $this->bound = true; - $this->appData = $appData; + $this->modelData = $modelData; $this->normData = $normData; - $this->clientData = $clientData; + $this->viewData = $viewData; $this->extraData = $extraData; $this->synchronized = $synchronized; - $event = new DataEvent($this, $clientData); + $event = new DataEvent($this, $viewData); $this->config->getEventDispatcher()->dispatch(FormEvents::POST_BIND, $event); foreach ($this->config->getValidators() as $validator) { @@ -673,7 +690,7 @@ public function isEmpty() } } - return array() === $this->appData || null === $this->appData || '' === $this->appData; + return array() === $this->modelData || null === $this->modelData || '' === $this->modelData; } /** @@ -761,11 +778,11 @@ public function getErrorsAsString($level = 0) * @return array An array of DataTransformerInterface * * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use - * {@link getConfig()} and {@link FormConfigInterface::getNormTransformers()} instead. + * {@link getConfig()} and {@link FormConfigInterface::getModelTransformers()} instead. */ public function getNormTransformers() { - return $this->config->getNormTransformers(); + return $this->config->getModelTransformers(); } /** @@ -774,11 +791,11 @@ public function getNormTransformers() * @return array An array of DataTransformerInterface * * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use - * {@link getConfig()} and {@link FormConfigInterface::getClientTransformers()} instead. + * {@link getConfig()} and {@link FormConfigInterface::getViewTransformers()} instead. */ public function getClientTransformers() { - return $this->config->getClientTransformers(); + return $this->config->getViewTransformers(); } /** @@ -815,7 +832,7 @@ public function add(FormInterface $child) $child->setParent($this); if ($this->config->getDataMapper()) { - $this->config->getDataMapper()->mapDataToForms($this->getClientData(), array($child)); + $this->config->getDataMapper()->mapDataToForms($this->getViewData(), array($child)); } return $this; @@ -974,9 +991,9 @@ public function createView(FormView $parent = null) * * @return string */ - private function appToNorm($value) + private function modelToNorm($value) { - foreach ($this->config->getNormTransformers() as $transformer) { + foreach ($this->config->getModelTransformers() as $transformer) { $value = $transformer->transform($value); } @@ -990,9 +1007,9 @@ private function appToNorm($value) * * @return mixed */ - private function normToApp($value) + private function normToModel($value) { - $transformers = $this->config->getNormTransformers(); + $transformers = $this->config->getModelTransformers(); for ($i = count($transformers) - 1; $i >= 0; --$i) { $value = $transformers[$i]->reverseTransform($value); @@ -1008,15 +1025,15 @@ private function normToApp($value) * * @return string */ - private function normToClient($value) + private function normToView($value) { - if (!$this->config->getClientTransformers()) { + if (!$this->config->getViewTransformers()) { // Scalar values should always be converted to strings to // facilitate differentiation between empty ("") and zero (0). return null === $value || is_scalar($value) ? (string) $value : $value; } - foreach ($this->config->getClientTransformers() as $transformer) { + foreach ($this->config->getViewTransformers() as $transformer) { $value = $transformer->transform($value); } @@ -1030,9 +1047,9 @@ private function normToClient($value) * * @return mixed */ - private function clientToNorm($value) + private function viewToNorm($value) { - $transformers = $this->config->getClientTransformers(); + $transformers = $this->config->getViewTransformers(); if (!$transformers) { return '' === $value ? null : $value; diff --git a/src/Symfony/Component/Form/FormConfig.php b/src/Symfony/Component/Form/FormConfig.php index 204ae6698f69..447adc795ee8 100644 --- a/src/Symfony/Component/Form/FormConfig.php +++ b/src/Symfony/Component/Form/FormConfig.php @@ -61,12 +61,12 @@ class FormConfig implements FormConfigEditorInterface /** * @var array */ - private $clientTransformers = array(); + private $viewTransformers = array(); /** * @var array */ - private $normTransformers = array(); + private $modelTransformers = array(); /** * @var DataMapperInterface @@ -178,9 +178,9 @@ public function addValidator(FormValidatorInterface $validator) /** * {@inheritdoc} */ - public function appendClientTransformer(DataTransformerInterface $clientTransformer) + public function addViewTransformer(DataTransformerInterface $viewTransformer) { - $this->clientTransformers[] = $clientTransformer; + $this->viewTransformers[] = $viewTransformer; return $this; } @@ -188,29 +188,63 @@ public function appendClientTransformer(DataTransformerInterface $clientTransfor /** * {@inheritdoc} */ - public function prependClientTransformer(DataTransformerInterface $clientTransformer) + public function resetViewTransformers() { - array_unshift($this->clientTransformers, $clientTransformer); + $this->viewTransformers = array(); return $this; } /** - * {@inheritdoc} + * Alias of {@link addViewTransformer()}. + * + * @param DataTransformerInterface $viewTransformer + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link addViewTransformer()} instead. */ - public function resetClientTransformers() + public function appendClientTransformer(DataTransformerInterface $viewTransformer) + { + return $this->addViewTransformer($viewTransformer); + } + + /** + * Prepends a transformer to the client transformer chain. + * + * @param DataTransformerInterface $viewTransformer + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. + */ + public function prependClientTransformer(DataTransformerInterface $viewTransformer) { - $this->clientTransformers = array(); + array_unshift($this->viewTransformers, $viewTransformer); return $this; } + /** + * Alias of {@link resetViewTransformers()}. + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link resetViewTransformers()} instead. + */ + public function resetClientTransformers() + { + return $this->resetViewTransformers(); + } + /** * {@inheritdoc} */ - public function appendNormTransformer(DataTransformerInterface $normTransformer) + public function addModelTransformer(DataTransformerInterface $modelTransformer) { - $this->normTransformers[] = $normTransformer; + array_unshift($this->modelTransformers, $modelTransformer); return $this; } @@ -218,23 +252,57 @@ public function appendNormTransformer(DataTransformerInterface $normTransformer) /** * {@inheritdoc} */ - public function prependNormTransformer(DataTransformerInterface $normTransformer) + public function resetModelTransformers() { - array_unshift($this->normTransformers, $normTransformer); + $this->modelTransformers = array(); return $this; } /** - * {@inheritdoc} + * Appends a transformer to the normalization transformer chain + * + * @param DataTransformerInterface $modelTransformer + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. */ - public function resetNormTransformers() + public function appendNormTransformer(DataTransformerInterface $modelTransformer) { - $this->normTransformers = array(); + $this->modelTransformers[] = $modelTransformer; return $this; } + /** + * Alias of {@link addModelTransformer()}. + * + * @param DataTransformerInterface $modelTransformer + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link addModelTransformer()} instead. + */ + public function prependNormTransformer(DataTransformerInterface $modelTransformer) + { + return $this->addModelTransformer($modelTransformer); + } + + /** + * Alias of {@link resetModelTransformers()}. + * + * @return self The configuration object. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link resetModelTransformers()} instead. + */ + public function resetNormTransformers() + { + return $this->resetModelTransformers(); + } + /** * {@inheritdoc} */ @@ -294,17 +362,43 @@ public function getTypes() /** * {@inheritdoc} */ + public function getViewTransformers() + { + return $this->viewTransformers; + } + + /** + * Alias of {@link getViewTransformers()}. + * + * @return array The view transformers. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link getViewTransformers()} instead. + */ public function getClientTransformers() { - return $this->clientTransformers; + return $this->getViewTransformers(); } /** * {@inheritdoc} */ + public function getModelTransformers() + { + return $this->modelTransformers; + } + + /** + * Alias of {@link getModelTransformers()}. + * + * @return array The model transformers. + * + * @deprecated Deprecated since version 2.1, to be removed in 2.3. Use + * {@link getModelTransformers()} instead. + */ public function getNormTransformers() { - return $this->normTransformers; + return $this->getModelTransformers(); } /** diff --git a/src/Symfony/Component/Form/FormConfigEditorInterface.php b/src/Symfony/Component/Form/FormConfigEditorInterface.php index 87b92b079308..2a16de5e5d26 100644 --- a/src/Symfony/Component/Form/FormConfigEditorInterface.php +++ b/src/Symfony/Component/Form/FormConfigEditorInterface.php @@ -54,52 +54,34 @@ function addValidator(FormValidatorInterface $validator); /** * Appends a transformer to the client transformer chain * - * @param DataTransformerInterface $clientTransformer + * @param DataTransformerInterface $viewTransformer * * @return self The configuration object. */ - function appendClientTransformer(DataTransformerInterface $clientTransformer); - - /** - * Prepends a transformer to the client transformer chain. - * - * @param DataTransformerInterface $clientTransformer - * - * @return self The configuration object. - */ - function prependClientTransformer(DataTransformerInterface $clientTransformer); + function addViewTransformer(DataTransformerInterface $viewTransformer); /** * Clears the client transformers. * * @return self The configuration object. */ - function resetClientTransformers(); - - /** - * Appends a transformer to the normalization transformer chain - * - * @param DataTransformerInterface $normTransformer - * - * @return self The configuration object. - */ - function appendNormTransformer(DataTransformerInterface $normTransformer); + function resetViewTransformers(); /** * Prepends a transformer to the normalization transformer chain * - * @param DataTransformerInterface $normTransformer + * @param DataTransformerInterface $modelTransformer * * @return self The configuration object. */ - function prependNormTransformer(DataTransformerInterface $normTransformer); + function addModelTransformer(DataTransformerInterface $modelTransformer); /** * Clears the normalization transformers. * * @return self The configuration object. */ - function resetNormTransformers(); + function resetModelTransformers(); /** * Sets the value for an attribute. diff --git a/src/Symfony/Component/Form/FormConfigInterface.php b/src/Symfony/Component/Form/FormConfigInterface.php index ca1951f0019a..ee284bb5fab8 100644 --- a/src/Symfony/Component/Form/FormConfigInterface.php +++ b/src/Symfony/Component/Form/FormConfigInterface.php @@ -77,14 +77,14 @@ function getTypes(); * * @return array An array of {@link DataTransformerInterface} instances. */ - function getClientTransformers(); + function getViewTransformers(); /** * Returns the view transformers of the form. * * @return array An array of {@link DataTransformerInterface} instances. */ - function getNormTransformers(); + function getModelTransformers(); /** * Returns the data mapper of the form. diff --git a/src/Symfony/Component/Form/FormInterface.php b/src/Symfony/Component/Form/FormInterface.php index c90b41519d20..cd8a87d7a5ee 100644 --- a/src/Symfony/Component/Form/FormInterface.php +++ b/src/Symfony/Component/Form/FormInterface.php @@ -101,11 +101,11 @@ function getErrors(); /** * Updates the field with default data. * - * @param array $appData The data formatted as expected for the underlying object + * @param array $modelData The data formatted as expected for the underlying object * * @return FormInterface The form instance */ - function setData($appData); + function setData($modelData); /** * Returns the data in the format needed for the underlying object. @@ -128,7 +128,7 @@ function getNormData(); * * @return string */ - function getClientData(); + function getViewData(); /** * Returns the extra data. diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php index 5cf494572ab5..5240b5e10568 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php @@ -122,7 +122,7 @@ function ($value) { $form = $this->builder ->create('expedited_shipping', 'checkbox') - ->prependNormTransformer($transformer) + ->addModelTransformer($transformer) ->getForm(); $form->setData($data); $view = $form->createView(); diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php index cd0e8d909d92..1284467a3d75 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php @@ -185,7 +185,7 @@ public function testDontValidateIfNotSynchronized() $form = $this->getBuilder('name', '\stdClass', array('invalid_message' => 'Invalid!')) ->setData($object) - ->appendClientTransformer(new CallbackTransformer( + ->addViewTransformer(new CallbackTransformer( function ($data) { return $data; }, function () { throw new TransformationFailedException(); } )) @@ -218,7 +218,7 @@ public function testDontValidateConstraintsIfNotSynchronized() ); $form = $this->getBuilder('name', '\stdClass', $options) ->setData($object) - ->appendClientTransformer(new CallbackTransformer( + ->addViewTransformer(new CallbackTransformer( function ($data) { return $data; }, function () { throw new TransformationFailedException(); } )) diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php index 068dfb0a8878..252b23c9c5e4 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php @@ -75,7 +75,7 @@ protected function getForm($name = 'name', $propertyPath = null, $dataClass = nu $config->setAttribute('error_mapping', $errorMapping); if (!$synchronized) { - $config->appendClientTransformer(new CallbackTransformer( + $config->addViewTransformer(new CallbackTransformer( function ($normData) { return $normData; }, function () { throw new TransformationFailedException(); } )); diff --git a/src/Symfony/Component/Form/Tests/FormTest.php b/src/Symfony/Component/Form/Tests/FormTest.php index e7cce5f6e3e3..4956728aeb4d 100644 --- a/src/Symfony/Component/Form/Tests/FormTest.php +++ b/src/Symfony/Component/Form/Tests/FormTest.php @@ -63,13 +63,13 @@ public function testDataIsInitializedEmpty() )); $config = new FormConfig('name', null, $this->dispatcher); - $config->appendClientTransformer($client); + $config->addViewTransformer($client); $config->appendNormTransformer($norm); $form = new Form($config); $this->assertNull($form->getData()); $this->assertSame('foo', $form->getNormData()); - $this->assertSame('bar', $form->getClientData()); + $this->assertSame('bar', $form->getViewData()); } public function testValidIfAllChildrenAreValid() @@ -496,7 +496,7 @@ public function testSetDataExecutesTransformationChain() '' => '', 'filtered' => 'norm', ))) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'norm' => 'client', ))) @@ -512,11 +512,11 @@ public function testSetDataExecutesTransformationChain() public function testSetDataExecutesClientTransformersInOrder() { $form = $this->getBuilder() - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'first' => 'second', ))) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'second' => 'third', ))) @@ -557,7 +557,7 @@ public function testSetDataConvertsScalarToStringIfNoTransformer() $this->assertSame('1', $form->getData()); $this->assertSame('1', $form->getNormData()); - $this->assertSame('1', $form->getClientData()); + $this->assertSame('1', $form->getViewData()); } /* @@ -592,7 +592,7 @@ public function testSetDataConvertsNullToStringIfNoTransformer() $this->assertNull($form->getData()); $this->assertNull($form->getNormData()); - $this->assertSame('', $form->getClientData()); + $this->assertSame('', $form->getViewData()); } public function testBindConvertsEmptyToNullIfNoTransformer() @@ -603,7 +603,7 @@ public function testBindConvertsEmptyToNullIfNoTransformer() $this->assertNull($form->getData()); $this->assertNull($form->getNormData()); - $this->assertSame('', $form->getClientData()); + $this->assertSame('', $form->getViewData()); } public function testBindExecutesTransformationChain() @@ -618,7 +618,7 @@ public function testBindExecutesTransformationChain() 'norm' => 'filterednorm', ), ))) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', // direction is reversed! 'norm' => 'filteredclient', @@ -641,11 +641,11 @@ public function testBindExecutesTransformationChain() public function testBindExecutesClientTransformersInReverseOrder() { $form = $this->getBuilder() - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'third' => 'second', ))) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'second' => 'first', ))) @@ -694,7 +694,7 @@ public function testNotSynchronizedIfTransformationFailed() ->will($this->throwException(new TransformationFailedException())); $form = $this->getBuilder() - ->appendClientTransformer($transformer) + ->addViewTransformer($transformer) ->getForm(); $form->bind('foobar'); @@ -706,7 +706,7 @@ public function testEmptyDataCreatedBeforeTransforming() { $form = $this->getBuilder() ->setEmptyData('foo') - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', // direction is reversed! 'bar' => 'foo', @@ -729,7 +729,7 @@ public function testEmptyDataFromClosure() return 'foo'; }) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', // direction is reversed! 'bar' => 'foo', @@ -746,7 +746,7 @@ public function testAddMapsClientDataToForm() $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setDataMapper($mapper) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => 'bar', ))) @@ -766,7 +766,7 @@ public function testSetDataMapsClientDataToChildren() $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setDataMapper($mapper) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => 'bar', ))) @@ -788,7 +788,7 @@ public function testBindMapsBoundChildrenOntoExistingClientData() $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setDataMapper($mapper) - ->appendClientTransformer(new FixedDataTransformer(array( + ->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => 'bar', ))) @@ -1259,7 +1259,7 @@ public function testGetPropertyPathDefaultsToIndexedNameIfParentDataClassIsNull( public function testClientDataMustNotBeObjectIfDataClassIsNull() { $config = new FormConfig('name', null, $this->dispatcher); - $config->appendClientTransformer(new FixedDataTransformer(array( + $config->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => new \stdClass(), ))); @@ -1272,7 +1272,7 @@ public function testClientDataMayBeArrayAccessIfDataClassIsNull() { $arrayAccess = $this->getMock('\ArrayAccess'); $config = new FormConfig('name', null, $this->dispatcher); - $config->appendClientTransformer(new FixedDataTransformer(array( + $config->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => $arrayAccess, ))); @@ -1280,7 +1280,7 @@ public function testClientDataMayBeArrayAccessIfDataClassIsNull() $form->setData('foo'); - $this->assertSame($arrayAccess, $form->getClientData()); + $this->assertSame($arrayAccess, $form->getViewData()); } /** @@ -1289,7 +1289,7 @@ public function testClientDataMayBeArrayAccessIfDataClassIsNull() public function testClientDataMustBeObjectIfDataClassIsSet() { $config = new FormConfig('name', 'stdClass', $this->dispatcher); - $config->appendClientTransformer(new FixedDataTransformer(array( + $config->addViewTransformer(new FixedDataTransformer(array( '' => '', 'foo' => array('bar' => 'baz'), ))); diff --git a/src/Symfony/Component/Form/UnmodifiableFormConfig.php b/src/Symfony/Component/Form/UnmodifiableFormConfig.php index 39cd86d518bc..27bc13044a7f 100644 --- a/src/Symfony/Component/Form/UnmodifiableFormConfig.php +++ b/src/Symfony/Component/Form/UnmodifiableFormConfig.php @@ -136,8 +136,8 @@ public function __construct(FormConfigInterface $config) $this->byReference = $config->getByReference(); $this->virtual = $config->getVirtual(); $this->types = $config->getTypes(); - $this->clientTransformers = $config->getClientTransformers(); - $this->normTransformers = $config->getNormTransformers(); + $this->clientTransformers = $config->getViewTransformers(); + $this->normTransformers = $config->getModelTransformers(); $this->dataMapper = $config->getDataMapper(); $this->validators = $config->getValidators(); $this->required = $config->getRequired(); @@ -209,7 +209,7 @@ public function getTypes() /** * {@inheritdoc} */ - public function getClientTransformers() + public function getViewTransformers() { return $this->clientTransformers; } @@ -217,7 +217,7 @@ public function getClientTransformers() /** * {@inheritdoc} */ - public function getNormTransformers() + public function getModelTransformers() { return $this->normTransformers; }