protected FormValidator::performRequiredValidation(&$elements, FormStateInterface &$form_state)
Performs validation of elements that are not subject to limited validation.
Parameters
array $elements: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form. The current user-submitted data is stored in $form_state->getValues(), though form validation functions are passed an explicit copy of the values for the sake of simplicity. Validation handlers can also $form_state to pass information on to submit handlers. For example: $form_state->set('data_for_submission', $data); This technique is useful when validation requires file parsing, web service requests, or other expensive requests that should not be repeated in the submission step.
File
- core/lib/Drupal/Core/Form/FormValidator.php, line 326
Class
- FormValidator
- Provides validation of form submissions.
Namespace
Drupal\Core\Form
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | protected function performRequiredValidation(& $elements , FormStateInterface & $form_state ) { // Verify that the value is not longer than #maxlength. if (isset( $elements [ '#maxlength' ]) && Unicode:: strlen ( $elements [ '#value' ]) > $elements [ '#maxlength' ]) { $form_state ->setError( $elements , $this ->t( '@name cannot be longer than %max characters but is currently %length characters long.' , array ( '@name' => empty ( $elements [ '#title' ]) ? $elements [ '#parents' ][0] : $elements [ '#title' ], '%max' => $elements [ '#maxlength' ], '%length' => Unicode:: strlen ( $elements [ '#value' ])))); } if (isset( $elements [ '#options' ]) && isset( $elements [ '#value' ])) { if ( $elements [ '#type' ] == 'select' ) { $options = OptGroup::flattenOptions( $elements [ '#options' ]); } else { $options = $elements [ '#options' ]; } if ( is_array ( $elements [ '#value' ])) { $value = in_array( $elements [ '#type' ], array ( 'checkboxes' , 'tableselect' )) ? array_keys ( $elements [ '#value' ]) : $elements [ '#value' ]; foreach ( $value as $v ) { if (!isset( $options [ $v ])) { $form_state ->setError( $elements , $this ->t( 'An illegal choice has been detected. Please contact the site administrator.' )); $this ->logger->error( 'Illegal choice %choice in %name element.' , array ( '%choice' => $v , '%name' => empty ( $elements [ '#title' ]) ? $elements [ '#parents' ][0] : $elements [ '#title' ])); } } } // Non-multiple select fields always have a value in HTML. If the user // does not change the form, it will be the value of the first option. // Because of this, form validation for the field will almost always // pass, even if the user did not select anything. To work around this // browser behavior, required select fields without a #default_value // get an additional, first empty option. In case the submitted value // is identical to the empty option's value, we reset the element's // value to NULL to trigger the regular #required handling below. // @see \Drupal\Core\Render\Element\Select::processSelect() elseif ( $elements [ '#type' ] == 'select' && ! $elements [ '#multiple' ] && $elements [ '#required' ] && !isset( $elements [ '#default_value' ]) && $elements [ '#value' ] === $elements [ '#empty_value' ]) { $elements [ '#value' ] = NULL; $form_state ->setValueForElement( $elements , NULL); } elseif (!isset( $options [ $elements [ '#value' ]])) { $form_state ->setError( $elements , $this ->t( 'An illegal choice has been detected. Please contact the site administrator.' )); $this ->logger->error( 'Illegal choice %choice in %name element.' , array ( '%choice' => $elements [ '#value' ], '%name' => empty ( $elements [ '#title' ]) ? $elements [ '#parents' ][0] : $elements [ '#title' ])); } } } |
Please login to continue.