Drupal → Как создать свой составной элемент формы
Пример создания элемента формы fullname
с тремя полями - Фамилия, имя, отчество.
src/Element/FullnameElement.php
<?php namespace Drupal\modulename\Element; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element\FormElement; /** * @FormElement("fullname") */ class FullnameElement extends FormElement { /** * {@inheritDoc} */ public function getInfo() { $class = get_class($this); return [ '#input' => TRUE, '#process' => [ [$class, 'processElement'], ], '#theme_wrappers' => ['form_element'], ]; } /** * Element process callback. */ public static function processElement(array &$element, FormStateInterface $form_state, array &$complete_form) { $element['#tree'] = TRUE; $element['surname'] = [ '#type' => 'textfield', '#title' => t('Surname'), '#default_value' => $element['#default_value']['surname'] ?? '', ]; $element['firstname'] = [ '#type' => 'textfield', '#title' => t('Firstname'), '#default_value' => $element['#default_value']['firstname'] ?? '', ]; $element['middlename'] = [ '#type' => 'textfield', '#title' => t('Middlename'), '#default_value' => $element['#default_value']['middlename'] ?? '', ]; return $element; } }
Пример использования в форме:
$form['contact_information'] = [ '#type' => 'fullname', '#title' => t('Contact information'), ];
Комментарии
А вне формы такой элемент можно использовать, например, в рендер массиве блока?
Можно,
FormElement
наследуется отRenderElement
Оставить комментарий