CHANGELOG ========= 5.4 --- * Deprecate calling `FormErrorIterator::children()` if the current element is not iterable. * Allow to pass `TranslatableMessage` objects to the `help` option * Add the `EnumType` 5.3 --- * Changed `$forms` parameter type of the `DataMapperInterface::mapDataToForms()` method from `iterable` to `\Traversable`. * Changed `$forms` parameter type of the `DataMapperInterface::mapFormsToData()` method from `iterable` to `\Traversable`. * Deprecated passing an array as the second argument of the `DataMapper::mapDataToForms()` method, pass `\Traversable` instead. * Deprecated passing an array as the first argument of the `DataMapper::mapFormsToData()` method, pass `\Traversable` instead. * Deprecated passing an array as the second argument of the `CheckboxListMapper::mapDataToForms()` method, pass `\Traversable` instead. * Deprecated passing an array as the first argument of the `CheckboxListMapper::mapFormsToData()` method, pass `\Traversable` instead. * Deprecated passing an array as the second argument of the `RadioListMapper::mapDataToForms()` method, pass `\Traversable` instead. * Deprecated passing an array as the first argument of the `RadioListMapper::mapFormsToData()` method, pass `\Traversable` instead. * Added a `choice_translation_parameters` option to `ChoiceType` * Add `UuidType` and `UlidType` * Dependency on `symfony/intl` was removed. Install `symfony/intl` if you are using `LocaleType`, `CountryType`, `CurrencyType`, `LanguageType` or `TimezoneType`. * Add `priority` option to `BaseType` and sorting view fields 5.2.0 ----- * Added support for using the `{{ label }}` placeholder in constraint messages, which is replaced in the `ViolationMapper` by the corresponding field form label. * Added `DataMapper`, `ChainAccessor`, `PropertyPathAccessor` and `CallbackAccessor` with new callable `getter` and `setter` options for each form type * Deprecated `PropertyPathMapper` in favor of `DataMapper` and `PropertyPathAccessor` * Added an `html5` option to `MoneyType` and `PercentType`, to use `` 5.1.0 ----- * Deprecated not configuring the `rounding_mode` option of the `PercentType`. It will default to `\NumberFormatter::ROUND_HALFUP` in Symfony 6. * Deprecated not passing a rounding mode to the constructor of `PercentToLocalizedStringTransformer`. It will default to `\NumberFormatter::ROUND_HALFUP` in Symfony 6. * Added `collection_entry` block prefix to `CollectionType` entries * Added a `choice_filter` option to `ChoiceType` * Added argument `callable|null $filter` to `ChoiceListFactoryInterface::createListFromChoices()` and `createListFromLoader()` - not defining them is deprecated. * Added a `ChoiceList` facade to leverage explicit choice list caching based on options * Added an `AbstractChoiceLoader` to simplify implementations and handle global optimizations * The `view_timezone` option defaults to the `model_timezone` if no `reference_date` is configured. * Implementing the `FormConfigInterface` without implementing the `getIsEmptyCallback()` method is deprecated. The method will be added to the interface in 6.0. * Implementing the `FormConfigBuilderInterface` without implementing the `setIsEmptyCallback()` method is deprecated. The method will be added to the interface in 6.0. * Added a `rounding_mode` option for the PercentType and correctly round the value when submitted * Deprecated `Symfony\Component\Form\Extension\Validator\Util\ServerParams` in favor of its parent class `Symfony\Component\Form\Util\ServerParams` * Added the `html5` option to the `ColorType` to validate the input * Deprecated `NumberToLocalizedStringTransformer::ROUND_*` constants, use `\NumberFormatter::ROUND_*` instead 5.0.0 ----- * Removed support for using different values for the "model_timezone" and "view_timezone" options of the `TimeType` without configuring a reference date. * Removed the `scale` option of the `IntegerType`. * Using the `date_format`, `date_widget`, and `time_widget` options of the `DateTimeType` when the `widget` option is set to `single_text` is not supported anymore. * The `format` option of `DateType` and `DateTimeType` cannot be used when the `html5` option is enabled. * Using names for buttons that do not start with a letter, a digit, or an underscore throw an exception * Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons throw an exception. * removed the `ChoiceLoaderInterface` implementation in `CountryType`, `LanguageType`, `LocaleType` and `CurrencyType` * removed `getExtendedType()` method of the `FormTypeExtensionInterface` * added static `getExtendedTypes()` method to the `FormTypeExtensionInterface` * calling to `FormRenderer::searchAndRenderBlock()` method for fields which were already rendered throw a `BadMethodCallException` * removed the `regions` option of the `TimezoneType` * removed the `$scale` argument of the `IntegerToLocalizedStringTransformer` * removed `TemplatingExtension` and `TemplatingRendererEngine` classes, use Twig instead * passing a null message when instantiating a `Symfony\Component\Form\FormError` is not allowed * removed support for using `int` or `float` as data for the `NumberType` when the `input` option is set to `string` 4.4.0 ----- * add new `WeekType` * using different values for the "model_timezone" and "view_timezone" options of the `TimeType` without configuring a reference date is deprecated * preferred choices are repeated in the list of all choices * deprecated using `int` or `float` as data for the `NumberType` when the `input` option is set to `string` * The type guesser guesses the HTML accept attribute when a mime type is configured in the File or Image constraint. * Overriding the methods `FormIntegrationTestCase::setUp()`, `TypeTestCase::setUp()` and `TypeTestCase::tearDown()` without the `void` return-type is deprecated. * marked all dispatched event classes as `@final` * Added the `validate` option to `SubmitType` to toggle the browser built-in form validation. * Added the `alpha3` option to `LanguageType` and `CountryType` to use alpha3 instead of alpha2 codes 4.3.0 ----- * added a `symbol` option to the `PercentType` that allows to disable or customize the output of the percent character * Using the `format` option of `DateType` and `DateTimeType` when the `html5` option is enabled is deprecated. * Using names for buttons that do not start with a letter, a digit, or an underscore is deprecated and will lead to an exception in 5.0. * Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons is deprecated and will lead to an exception in 5.0. * added `html5` option to `NumberType` that allows to render `type="number"` input fields * deprecated using the `date_format`, `date_widget`, and `time_widget` options of the `DateTimeType` when the `widget` option is set to `single_text` * added `block_prefix` option to `BaseType`. * added `help_html` option to display the `help` text as HTML. * `FormError` doesn't implement `Serializable` anymore * `FormDataCollector` has been marked as `final` * added `label_translation_parameters`, `attr_translation_parameters`, `help_translation_parameters` options to `FormType` to pass translation parameters to form labels, attributes (`placeholder` and `title`) and help text respectively. The passed parameters will replace placeholders in translation messages. ```php class OrderType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('comment', TextType::class, [ 'label' => 'Comment to the order to %company%', 'label_translation_parameters' => [ '%company%' => 'Acme', ], 'help' => 'The address of the %company% is %address%', 'help_translation_parameters' => [ '%company%' => 'Acme Ltd.', '%address%' => '4 Form street, Symfonyville', ], ]) } } ``` * added the `input_format` option to `DateType`, `DateTimeType`, and `TimeType` to specify the input format when setting the `input` option to `string` * dispatch `PreSubmitEvent` on `form.pre_submit` * dispatch `SubmitEvent` on `form.submit` * dispatch `PostSubmitEvent` on `form.post_submit` * dispatch `PreSetDataEvent` on `form.pre_set_data` * dispatch `PostSetDataEvent` on `form.post_set_data` * added an `input` option to `NumberType` * removed default option grouping in `TimezoneType`, use `group_by` instead 4.2.0 ----- * The `getExtendedType()` method of the `FormTypeExtensionInterface` is deprecated and will be removed in 5.0. Type extensions must implement the static `getExtendedTypes()` method instead and return an iterable of extended types. Before: ```php class FooTypeExtension extends AbstractTypeExtension { public function getExtendedType() { return FormType::class; } // ... } ``` After: ```php class FooTypeExtension extends AbstractTypeExtension { public static function getExtendedTypes(): iterable { return [FormType::class]; } // ... } ``` * deprecated the `$scale` argument of the `IntegerToLocalizedStringTransformer` * added `Symfony\Component\Form\ClearableErrorsInterface` * deprecated calling `FormRenderer::searchAndRenderBlock` for fields which were already rendered * added a cause when a CSRF error has occurred * deprecated the `scale` option of the `IntegerType` * removed restriction on allowed HTTP methods * deprecated the `regions` option of the `TimezoneType` 4.1.0 ----- * added `input=datetime_immutable` to `DateType`, `TimeType`, `DateTimeType` * added `rounding_mode` option to `MoneyType` * added `choice_translation_locale` option to `CountryType`, `LanguageType`, `LocaleType` and `CurrencyType` * deprecated the `ChoiceLoaderInterface` implementation in `CountryType`, `LanguageType`, `LocaleType` and `CurrencyType` * added `input=datetime_immutable` to DateType, TimeType, DateTimeType * added `rounding_mode` option to MoneyType 4.0.0 ----- * using the `choices` option in `CountryType`, `CurrencyType`, `LanguageType`, `LocaleType`, and `TimezoneType` when the `choice_loader` option is not `null` is not supported anymore and the configured choices will be ignored * callable strings that are passed to the options of the `ChoiceType` are treated as property paths * the `choices_as_values` option of the `ChoiceType` has been removed * removed the support for caching loaded choice lists in `LazyChoiceList`, cache the choice list in the used `ChoiceLoaderInterface` implementation instead * removed the support for objects implementing both `\Traversable` and `\ArrayAccess` in `ResizeFormListener::preSubmit()` * removed the ability to use `FormDataCollector` without the `symfony/var-dumper` component * removed passing a `ValueExporter` instance to the `FormDataExtractor::__construct()` method * removed passing guesser services ids as the fourth argument of `DependencyInjectionExtension::__construct()` * removed the ability to validate an unsubmitted form. * removed `ChoiceLoaderInterface` implementation in `TimezoneType` * added the `false_values` option to the `CheckboxType` which allows to configure custom values which will be treated as `false` during submission 3.4.0 ----- * added `DebugCommand` * deprecated `ChoiceLoaderInterface` implementation in `TimezoneType` * added options "input" and "regions" to `TimezoneType` * added an option to ``Symfony\Component\Form\FormRendererEngineInterface::setTheme()`` and ``Symfony\Component\Form\FormRendererInterface::setTheme()`` to disable usage of default themes when rendering a form 3.3.0 ----- * deprecated using "choices" option in ``CountryType``, ``CurrencyType``, ``LanguageType``, ``LocaleType``, and ``TimezoneType`` when "choice_loader" is not ``null`` * added `Symfony\Component\Form\FormErrorIterator::findByCodes()` * added `getTypedExtensions`, `getTypes`, and `getTypeGuessers` to `Symfony\Component\Form\Test\FormIntegrationTestCase` * added `FormPass` 3.2.0 ----- * added `CallbackChoiceLoader` * implemented `ChoiceLoaderInterface` in children of `ChoiceType` 3.1.0 ----- * deprecated the "choices_as_values" option of ChoiceType * deprecated support for data objects that implements both `Traversable` and `ArrayAccess` in `ResizeFormListener::preSubmit` method * Using callable strings as choice options in `ChoiceType` has been deprecated and will be used as `PropertyPath` instead of callable in Symfony 4.0. * implemented `DataTransformerInterface` in `TextType` * deprecated caching loaded choice list in `LazyChoiceList::$loadedList` 3.0.0 ----- * removed `FormTypeInterface::setDefaultOptions()` method * removed `AbstractType::setDefaultOptions()` method * removed `FormTypeExtensionInterface::setDefaultOptions()` method * removed `AbstractTypeExtension::setDefaultOptions()` method * added `FormTypeInterface::configureOptions()` method * added `FormTypeExtensionInterface::configureOptions()` method 2.8.0 ----- * added option "choice_translation_domain" to DateType, TimeType and DateTimeType. * deprecated option "read_only" in favor of "attr['readonly']" * added the html5 "range" FormType * deprecated the "cascade_validation" option in favor of setting "constraints" with the Valid constraint * moved data trimming logic of TrimListener into StringUtil * [BC BREAK] When registering a type extension through the DI extension, the tag alias has to match the actual extended type. 2.7.38 ------ * [BC BREAK] the `isFileUpload()` method was added to the `RequestHandlerInterface` 2.7.0 ----- * added option "choice_translation_domain" to ChoiceType. * deprecated option "precision" in favor of "scale" * deprecated the overwriting of AbstractType::setDefaultOptions() in favor of overwriting AbstractType::configureOptions(). * deprecated the overwriting of AbstractTypeExtension::setDefaultOptions() in favor of overwriting AbstractTypeExtension::configureOptions(). * added new ChoiceList interface and implementations in the Symfony\Component\Form\ChoiceList namespace * added new ChoiceView in the Symfony\Component\Form\ChoiceList\View namespace * choice groups are now represented by ChoiceGroupView objects in the view * deprecated the old ChoiceList interface and implementations * deprecated the old ChoiceView class * added CheckboxListMapper and RadioListMapper * deprecated ChoiceToBooleanArrayTransformer and ChoicesToBooleanArrayTransformer * deprecated FixCheckboxInputListener and FixRadioInputListener * deprecated the "choice_list" option of ChoiceType * added new options to ChoiceType: * "choices_as_values" * "choice_loader" * "choice_label" * "choice_name" * "choice_value" * "choice_attr" * "group_by" 2.6.2 ----- * Added back the `model_timezone` and `view_timezone` options for `TimeType`, `DateType` and `BirthdayType` 2.6.0 ----- * added "html5" option to Date, Time and DateTimeFormType to be able to enable/disable HTML5 input date when widget option is "single_text" * added "label_format" option with possible placeholders "%name%" and "%id%" * [BC BREAK] drop support for model_timezone and view_timezone options in TimeType, DateType and BirthdayType, update to 2.6.2 to get back support for these options 2.5.0 ------ * deprecated options "max_length" and "pattern" in favor of putting these values in "attr" option * added an option for multiple files upload * form errors now reference their cause (constraint violation, exception, ...) * form errors now remember which form they were originally added to * [BC BREAK] added two optional parameters to FormInterface::getErrors() and changed the method to return a Symfony\Component\Form\FormErrorIterator instance instead of an array * errors mapped to unsubmitted forms are discarded now * ObjectChoiceList now compares choices by their value, if a value path is given * you can now pass interface names in the "data_class" option * [BC BREAK] added `FormInterface::getTransformationFailure()` 2.4.0 ----- * moved CSRF implementation to the new Security CSRF sub-component * deprecated CsrfProviderInterface and its implementations * deprecated options "csrf_provider" and "intention" in favor of the new options "csrf_token_manager" and "csrf_token_id" 2.3.0 ----- * deprecated FormPerformanceTestCase and FormIntegrationTestCase in the Symfony\Component\Form\Tests namespace and moved them to the Symfony\Component\Form\Test namespace * deprecated TypeTestCase in the Symfony\Component\Form\Tests\Extension\Core\Type namespace and moved it to the Symfony\Component\Form\Test namespace * changed FormRenderer::humanize() to humanize also camel cased field name * added RequestHandlerInterface and FormInterface::handleRequest() * deprecated passing a Request instance to FormInterface::bind() * added options "method" and "action" to FormType * deprecated option "virtual" in favor "inherit_data" * deprecated VirtualFormAwareIterator in favor of InheritDataAwareIterator * [BC BREAK] removed the "array" type hint from DataMapperInterface * improved forms inheriting their parent data to actually return that data from getData(), getNormData() and getViewData() * added component-level exceptions for various SPL exceptions changed all uses of the deprecated Exception class to use more specialized exceptions instead removed NotInitializedException, NotValidException, TypeDefinitionException, TypeLoaderException, CreationException * added events PRE_SUBMIT, SUBMIT and POST_SUBMIT * deprecated events PRE_BIND, BIND and POST_BIND * [BC BREAK] renamed bind() and isBound() in FormInterface to submit() and isSubmitted() * added methods submit() and isSubmitted() to Form * deprecated bind() and isBound() in Form * deprecated AlreadyBoundException in favor of AlreadySubmittedException * added support for PATCH requests * [BC BREAK] added initialize() to FormInterface * [BC BREAK] added getAutoInitialize() to FormConfigInterface * [BC BREAK] added setAutoInitialize() to FormConfigBuilderInterface * [BC BREAK] initialization for Form instances added to a form tree must be manually disabled * PRE_SET_DATA is now guaranteed to be called after children were added by the form builder, unless FormInterface::setData() is called manually * fixed CSRF error message to be translated * custom CSRF error messages can now be set through the "csrf_message" option * fixed: expanded single-choice fields now show a radio button for the empty value 2.2.0 ----- * TrimListener now removes unicode whitespaces * deprecated getParent(), setParent() and hasParent() in FormBuilderInterface * FormInterface::add() now accepts a FormInterface instance OR a field's name, type and options * removed special characters between the choice or text fields of DateType unless the option "format" is set to a custom value * deprecated FormException and introduced ExceptionInterface instead * [BC BREAK] FormException is now an interface * protected FormBuilder methods from being called when it is turned into a FormConfigInterface with getFormConfig() * [BC BREAK] inserted argument `$message` in the constructor of `FormError` * the PropertyPath class and related classes were moved to a dedicated PropertyAccess component. During the move, InvalidPropertyException was renamed to NoSuchPropertyException. FormUtil was split: FormUtil::singularify() can now be found in Symfony\Component\PropertyAccess\StringUtil. The methods getValue() and setValue() from PropertyPath were extracted into a new class PropertyAccessor. * added an optional PropertyAccessorInterface parameter to FormType, ObjectChoiceList and PropertyPathMapper * [BC BREAK] PropertyPathMapper and FormType now have a constructor * [BC BREAK] setting the option "validation_groups" to ``false`` now disables validation instead of assuming group "Default" 2.1.0 ----- * [BC BREAK] ``read_only`` field attribute now renders as ``readonly="readonly"``, use ``disabled`` instead * [BC BREAK] child forms now aren't validated anymore by default * made validation of form children configurable (new option: cascade_validation) * added support for validation groups as callbacks * made the translation catalogue configurable via the "translation_domain" option * added Form::getErrorsAsString() to help debugging forms * allowed setting different options for RepeatedType fields (like the label) * added support for empty form name at root level, this enables rendering forms without form name prefix in field names * [BC BREAK] form and field names must start with a letter, digit or underscore and only contain letters, digits, underscores, hyphens and colons * [BC BREAK] changed default name of the prototype in the "collection" type from "$$name$$" to "\__name\__". No dollars are appended/prepended to custom names anymore. * [BC BREAK] improved ChoiceListInterface * [BC BREAK] added SimpleChoiceList and LazyChoiceList as replacement of ArrayChoiceList * added ChoiceList and ObjectChoiceList to use objects as choices * [BC BREAK] removed EntitiesToArrayTransformer and EntityToIdTransformer. The former has been replaced by CollectionToArrayTransformer in combination with EntityChoiceList, the latter is not required in the core anymore. * [BC BREAK] renamed * ArrayToBooleanChoicesTransformer to ChoicesToBooleanArrayTransformer * ScalarToBooleanChoicesTransformer to ChoiceToBooleanArrayTransformer * ArrayToChoicesTransformer to ChoicesToValuesTransformer * ScalarToChoiceTransformer to ChoiceToValueTransformer to be consistent with the naming in ChoiceListInterface. They were merged into ChoiceList and have no public equivalent anymore. * choice fields now throw a FormException if neither the "choices" nor the "choice_list" option is set * the radio type is now a child of the checkbox type * the collection, choice (with multiple selection) and entity (with multiple selection) types now make use of addXxx() and removeXxx() methods in your model if you set "by_reference" to false. For a custom, non-recognized singular form, set the "property_path" option like this: "plural|singular" * forms now don't create an empty object anymore if they are completely empty and not required. The empty value for such forms is null. * added constant Guess::VERY_HIGH_CONFIDENCE * [BC BREAK] The methods `add`, `remove`, `setParent`, `bind` and `setData` in class Form now throw an exception if the form is already bound * fields of constrained classes without a NotBlank or NotNull constraint are set to not required now, as stated in the docs * fixed TimeType and DateTimeType to not display seconds when "widget" is "single_text" unless "with_seconds" is set to true * checkboxes of in an expanded multiple-choice field don't include the choice in their name anymore. Their names terminate with "[]" now. * deprecated FormValidatorInterface and substituted its implementations by event subscribers * simplified CSRF protection and removed the csrf type * deprecated FieldType and merged it into FormType * added new option "compound" that lets you switch between field and form behavior * [BC BREAK] renamed theme blocks * "field_*" to "form_*" * "field_widget" to "form_widget_simple" * "widget_choice_options" to "choice_widget_options" * "generic_label" to "form_label" * added theme blocks "form_widget_compound", "choice_widget_expanded" and "choice_widget_collapsed" to make theming more modular * ValidatorTypeGuesser now guesses "collection" for array type constraint * added method `guessPattern` to FormTypeGuesserInterface to guess which pattern to use in the HTML5 attribute "pattern" * deprecated method `guessMinLength` in favor of `guessPattern` * labels don't display field attributes anymore. Label attributes can be passed in the "label_attr" option/variable * added option "mapped" which should be used instead of setting "property_path" to false * [BC BREAK] "data_class" now *must* be set if a form maps to an object and should be left empty otherwise * improved error mapping on forms * dot (".") rules are now allowed to map errors assigned to a form to one of its children * 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` * `getNormTransformers` * `getClientTransformers` * `getAttribute` * `hasAttribute` * `getClientData` * added FormBuilder methods * `getTypes` * `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 * `mapFormToData` * `mapDataToForm` * added `setDefaultOptions` to FormTypeInterface and FormTypeExtensionInterface which accepts an OptionsResolverInterface instance * deprecated the methods `getDefaultOptions` and `getAllowedOptionValues` in FormTypeInterface and FormTypeExtensionInterface * options passed during construction can now be accessed from FormConfigInterface * added FormBuilderInterface and FormConfigEditorInterface * [BC BREAK] the method `buildForm` in FormTypeInterface and FormTypeExtensionInterface now receives a FormBuilderInterface instead of a FormBuilder instance * [BC BREAK] the method `buildViewBottomUp` was renamed to `finishView` in FormTypeInterface and FormTypeExtensionInterface * [BC BREAK] the options array is now passed as last argument of the methods * `buildView` * `finishView` in FormTypeInterface and FormTypeExtensionInterface * [BC BREAK] no options are passed to `getParent` of FormTypeInterface anymore * deprecated DataEvent and FilterDataEvent in favor of the new FormEvent which is now passed to all events thrown by the component * FormEvents::BIND now replaces FormEvents::BIND_NORM_DATA * FormEvents::PRE_SET_DATA now replaces FormEvents::SET_DATA * FormEvents::PRE_BIND now replaces FormEvents::BIND_CLIENT_DATA * deprecated FormEvents::SET_DATA, FormEvents::BIND_CLIENT_DATA and FormEvents::BIND_NORM_DATA * [BC BREAK] reversed the order of the first two arguments to `createNamed` and `createNamedBuilder` in `FormFactoryInterface` * deprecated `getChildren` in Form and FormBuilder in favor of `all` * deprecated `hasChildren` in Form and FormBuilder in favor of `count` * FormBuilder now implements \IteratorAggregate * [BC BREAK] compound forms now always need a data mapper * FormBuilder now maintains the order when explicitly adding form builders as children * ChoiceType now doesn't add the empty value anymore if the choices already contain an empty element * DateType, TimeType and DateTimeType now show empty values again if not required * [BC BREAK] fixed rendering of errors for DateType, BirthdayType and similar ones * [BC BREAK] fixed: form constraints are only validated if they belong to the validated group * deprecated `bindRequest` in `Form` and replaced it by a listener to FormEvents::PRE_BIND * fixed: the "data" option supersedes default values from the model * changed DateType to refer to the "format" option for calculating the year and day choices instead of padding them automatically * [BC BREAK] DateType defaults to the format "yyyy-MM-dd" now if the widget is "single_text", in order to support the HTML 5 date field out of the box * added the option "format" to DateTimeType * [BC BREAK] DateTimeType now outputs RFC 3339 dates by default, as generated and consumed by HTML5 browsers, if the widget is "single_text" * deprecated the options "data_timezone" and "user_timezone" in DateType, DateTimeType and TimeType and renamed them to "model_timezone" and "view_timezone" * fixed: TransformationFailedExceptions thrown in the model transformer are now caught by the form * added FormRegistryInterface, ResolvedFormTypeInterface and ResolvedFormTypeFactoryInterface * deprecated FormFactory methods * `addType` * `hasType` * `getType` * [BC BREAK] FormFactory now expects a FormRegistryInterface and a ResolvedFormTypeFactoryInterface as constructor argument * [BC BREAK] The method `createBuilder` in FormTypeInterface is not supported anymore for performance reasons * [BC BREAK] Removed `setTypes` from FormBuilder * deprecated AbstractType methods * `getExtensions` * `setExtensions` * ChoiceType now caches its created choice lists to improve performance * [BC BREAK] Rows of a collection field cannot be themed individually anymore. All rows in the collection field now have the same block names, which contains "entry" where it previously contained the row index. * [BC BREAK] When registering a type through the DI extension, the tag alias has to match the actual type name. * added FormRendererInterface, FormRendererEngineInterface and implementations of these interfaces * [BC BREAK] removed the following methods from FormUtil: * `toArrayKey` * `toArrayKeys` * `isChoiceGroup` * `isChoiceSelected` * [BC BREAK] renamed method `renderBlock` in FormHelper to `block` and changed its signature * made FormView properties public and deprecated their accessor methods * made the normalized data of a form accessible in the template through the variable "form.vars.data" * made the original data of a choice accessible in the template through the property "choice.data" * added convenience class Forms and FormFactoryBuilderInterface