@@ -663,9 +663,14 @@ and the errors will display next to the fields on error.
663
663
Accessing Form Errors
664
664
~~~~~~~~~~~~~~~~~~~~~
665
665
666
+ .. versionadded :: 2.5
667
+ Before Symfony 2.5, ``getErrors() `` returned an array of ``FormError ``
668
+ objects. The return value was changed to ``FormErrorIterator `` in Symfony
669
+ 2.5.
670
+
666
671
You can use the :method: `Symfony\\ Component\\ Form\\ FormInterface::getErrors `
667
- method to access the list of errors. Each element is a :class: ` Symfony \\ Component \\ Form \\ FormError `
668
- object ::
672
+ method to access the list of errors. It returns a
673
+ :class: ` Symfony \\ Component \\ Form \\ FormErrorIterator ` instance ::
669
674
670
675
$form = ...;
671
676
@@ -687,12 +692,51 @@ object::
687
692
errors from that field. However, there is no way to determine which field
688
693
an error was originally attached to.
689
694
690
- .. note ::
695
+ .. tip ::
696
+
697
+ In older Symfony versions, ``getErrors() `` returned an array. To use the
698
+ errors the same way in Symfony 2.5 or newer, you have to pass them to
699
+ PHP's :phpfunction: `iterator_to_array ` function::
700
+
701
+ $errorsAsArray = iterator_to_array($form->getErrors());
702
+
703
+ This is useful, for example, if you want to use PHP's ``array_ `` function
704
+ on the form errors.
705
+
706
+ Child Form Errors
707
+ .................
708
+
709
+ .. versionadded :: 2.5
710
+ The ``$deep `` and ``$flatten `` arguments were introduced in Symfony 2.5.
711
+
712
+ By default, ``getErrors() `` only returns the errors of the form object it
713
+ was called on. To also include the errors of child forms, you'll have to pass
714
+ ``true `` as the first argument to it::
715
+
716
+ // ...
717
+
718
+ // $errors contains all errors of the whole form tree
719
+ $errors = $form->getErrors(true);
720
+
721
+ You can use the :method: `Symfony\\ Component\\ Form\\ FormError::getOrigin ` method
722
+ on each element returned by the ``FormErrorIterator `` to determine the form
723
+ the error belongs to.
724
+
725
+ You can also let the iterator reflect the form tree structure. To achieve
726
+ this, pass ``false `` as the second argument to ``getErrors() ``. The iterator
727
+ then returns a ``FormErrorIterator `` object for each child form instead of
728
+ multiple ``FormError `` childs. You can easily use a :phpclass: `RecursiveIteratorIterator `
729
+ to iterate over all errors::
730
+
731
+ $form = ...;
732
+
733
+ // ...
691
734
692
- Unless you enable the :ref: `error_bubbling <reference-form-option-error-bubbling >`
693
- option on a particular child form, ``getErrors() `` only returns the errors
694
- of the form it is accessed on. For debugging purposes, you can use the :method: `Symfony\\ Component\\ Form\\ Form::getErrorsAsString ` method which
695
- returns a string representation of all errors of the whole form tree.
735
+ $errors = $form->getErrors(true, false);
736
+
737
+ foreach ($errors as $error) {
738
+ // $error is a FormError instance
739
+ }
696
740
697
741
.. _Packagist : https://packagist.org/packages/symfony/form
698
742
.. _Twig : http://twig.sensiolabs.org
0 commit comments