Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
13 / 13 |
| FormErrorHandler | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
9 | |
100.00% |
13 / 13 |
| handleFormErrors | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| displayErrorMessages | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| setElementErrorsFromFormState | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
| drupalSetMessage | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Form\FormErrorHandler. | |
| */ | |
| namespace Drupal\Core\Form; | |
| use Drupal\Core\Render\Element; | |
| /** | |
| * Handles form errors. | |
| */ | |
| class FormErrorHandler implements FormErrorHandlerInterface { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function handleFormErrors(array &$form, FormStateInterface $form_state) { | |
| // After validation check if there are errors. | |
| if ($errors = $form_state->getErrors()) { | |
| // Display error messages for each element. | |
| $this->displayErrorMessages($form, $form_state); | |
| // Loop through and assign each element its errors. | |
| $this->setElementErrorsFromFormState($form, $form_state); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * Loops through and displays all form errors. | |
| * | |
| * @param array $form | |
| * An associative array containing the structure of the form. | |
| * @param \Drupal\Core\Form\FormStateInterface $form_state | |
| * The current state of the form. | |
| */ | |
| protected function displayErrorMessages(array $form, FormStateInterface $form_state) { | |
| $errors = $form_state->getErrors(); | |
| // Loop through all form errors and set an error message. | |
| foreach ($errors as $error) { | |
| $this->drupalSetMessage($error, 'error'); | |
| } | |
| } | |
| /** | |
| * Stores the errors of each element directly on the element. | |
| * | |
| * We must provide a way for non-form functions to check the errors for a | |
| * specific element. The most common usage of this is a #pre_render callback. | |
| * | |
| * @param array $elements | |
| * An associative array containing the structure of a form element. | |
| * @param \Drupal\Core\Form\FormStateInterface $form_state | |
| * The current state of the form. | |
| */ | |
| protected function setElementErrorsFromFormState(array &$elements, FormStateInterface &$form_state) { | |
| // Recurse through all children. | |
| foreach (Element::children($elements) as $key) { | |
| if (isset($elements[$key]) && $elements[$key]) { | |
| $this->setElementErrorsFromFormState($elements[$key], $form_state); | |
| } | |
| } | |
| // Store the errors for this element on the element directly. | |
| $elements['#errors'] = $form_state->getError($elements); | |
| } | |
| /** | |
| * Wraps drupal_set_message(). | |
| * | |
| * @codeCoverageIgnore | |
| */ | |
| protected function drupalSetMessage($message = NULL, $type = 'status', $repeat = FALSE) { | |
| drupal_set_message($message, $type, $repeat); | |
| } | |
| } |