1<?php 2 3namespace Drupal\form_test; 4 5use Drupal\Core\Form\FormStateInterface; 6 7/** 8 * Simple class for testing methods as Form API callbacks. 9 */ 10class Callbacks { 11 12 /** 13 * Form element validation handler for 'name' in form_test_validate_form(). 14 */ 15 public function validateName(&$element, FormStateInterface $form_state) { 16 $triggered = FALSE; 17 if ($form_state->getValue('name') == 'element_validate') { 18 // Alter the form element. 19 $element['#value'] = '#value changed by #element_validate'; 20 // Alter the submitted value in $form_state. 21 $form_state->setValueForElement($element, 'value changed by setValueForElement() in #element_validate'); 22 23 $triggered = TRUE; 24 } 25 if ($form_state->getValue('name') == 'element_validate_access') { 26 $form_state->set('form_test_name', $form_state->getValue('name')); 27 // Alter the form element. 28 $element['#access'] = FALSE; 29 30 $triggered = TRUE; 31 } 32 elseif ($form_state->has('form_test_name')) { 33 // To simplify this test, just take over the element's value into $form_state. 34 $form_state->setValueForElement($element, $form_state->get('form_test_name')); 35 36 $triggered = TRUE; 37 } 38 39 if ($triggered) { 40 // Output the element's value from $form_state. 41 \Drupal::messenger()->addStatus(t('@label value: @value', ['@label' => $element['#title'], '@value' => $form_state->getValue('name')])); 42 43 // Trigger a form validation error to see our changes. 44 $form_state->setErrorByName(''); 45 } 46 } 47 48} 49