public static MachineName::processMachineName(&$element, FormStateInterface $form_state, &$complete_form)
Processes a machine-readable name form element.
Parameters
array $element: The form element to process. See main class documentation for properties.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
array $complete_form: The complete form structure.
Return value
array The processed element.
File
- core/lib/Drupal/Core/Render/Element/MachineName.php, line 126
Class
- MachineName
- Provides a machine name render element.
Namespace
Drupal\Core\Render\Element
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | public static function processMachineName(& $element , FormStateInterface $form_state , & $complete_form ) { // We need to pass the langcode to the client. $language = \Drupal::languageManager()->getCurrentLanguage(); // Apply default form element properties. $element += array ( '#title' => t( 'Machine-readable name' ), '#description' => t( 'A unique machine-readable name. Can only contain lowercase letters, numbers, and underscores.' ), '#machine_name' => array (), '#field_prefix' => '' , '#field_suffix' => '' , '#suffix' => '' , ); // A form element that only wants to set one #machine_name property (usually // 'source' only) would leave all other properties undefined, if the defaults // were defined by an element plugin. Therefore, we apply the defaults here. $element [ '#machine_name' ] += array ( 'source' => array ( 'label' ), 'target' => '#' . $element [ '#id' ], 'label' => t( 'Machine name' ), 'replace_pattern' => '[^a-z0-9_]+' , 'replace' => '_' , 'standalone' => FALSE, 'field_prefix' => $element [ '#field_prefix' ], 'field_suffix' => $element [ '#field_suffix' ], ); // By default, machine names are restricted to Latin alphanumeric characters. // So, default to LTR directionality. if (!isset( $element [ '#attributes' ])) { $element [ '#attributes' ] = array (); } $element [ '#attributes' ] += array ( 'dir' => LanguageInterface::DIRECTION_LTR); // The source element defaults to array('name'), but may have been overridden. if ( empty ( $element [ '#machine_name' ][ 'source' ])) { return $element ; } // Retrieve the form element containing the human-readable name from the // complete form in $form_state. By reference, because we may need to append // a #field_suffix that will hold the live preview. $key_exists = NULL; $source = NestedArray::getValue( $form_state ->getCompleteForm(), $element [ '#machine_name' ][ 'source' ], $key_exists ); if (! $key_exists ) { return $element ; } $suffix_id = $source [ '#id' ] . '-machine-name-suffix' ; $element [ '#machine_name' ][ 'suffix' ] = '#' . $suffix_id ; if ( $element [ '#machine_name' ][ 'standalone' ]) { $element [ '#suffix' ] = $element [ '#suffix' ] . ' <small id="' . $suffix_id . '"> </small>' ; } else { // Append a field suffix to the source form element, which will contain // the live preview of the machine name. $source += array ( '#field_suffix' => '' ); $source [ '#field_suffix' ] = $source [ '#field_suffix' ] . ' <small id="' . $suffix_id . '"> </small>' ; $parents = array_merge ( $element [ '#machine_name' ][ 'source' ], array ( '#field_suffix' )); NestedArray::setValue( $form_state ->getCompleteForm(), $parents , $source [ '#field_suffix' ]); } $element [ '#attached' ][ 'library' ][] = 'core/drupal.machine-name' ; $options = [ 'replace_pattern' , 'replace' , 'maxlength' , 'target' , 'label' , 'field_prefix' , 'field_suffix' , 'suffix' , ]; $element [ '#attached' ][ 'drupalSettings' ][ 'machineName' ][ '#' . $source [ '#id' ]] = array_intersect_key ( $element [ '#machine_name' ], array_flip ( $options )); $element [ '#attached' ][ 'drupalSettings' ][ 'langcode' ] = $language ->getId(); return $element ; } |
Please login to continue.