Получить значение поля формы

Главные вкладки

Аватар пользователя mmjmm mmjmm 26 августа 2022 в 7:56

Здравствуйте.
У меня есть кастомная сущность. У нее есть форма редактирования сущности.
Мне надо в хуке hook_FORM_ID_form_alter из этой формы получить значение поля "автор" этой сущности

Название поля автор: name="uid[0][target_id]"

Пытался получить так: $form_state->getValue('uid[0][target_id]'), но не работает

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 26 августа 2022 в 8:41
1

Первый вопрос: где именно получить - т.е. на каком шаге?

$form_state->getValue('FIELD_NAME') работает в функции сабмита (т.е. после отправки формы) и возвращает значение запрошенного поля.

Есть ещё $form_state->getValues(), которая тоже может быть полезна на этапе сабмита и которая возвращает массив значений всех полей формы после её отправки.

Если нужно получать значение (как оно уже сохранено в сущности) при построении формы (т.е. в методе ::buildForm() или в имплементации hook_FORM_ID_form_alter), то следует читать это значение из собственно сущности, например: $entity->get('uid'). Разумеется, сначала нужно получить загруженную в форму сущность с помощью $form_state->getFormObject():

<?php
$form_object 
$form_state->getFormObject();
if (
$form_object instanceof EntityForm) {
  
$entity $form_object->getEntity();
  
$uid $entity->get('uid');
}
?>

Комментарии

Аватар пользователя ivnish ivnish 26 августа 2022 в 8:38

А зачем использовать hook_form_alter для кастомной формы? Можно же прямо в форме и писать нужный код.

mmjmm wrote: Название поля автор: name="uid[0][target_id]"

Поле "автор" получается не из формы, а из объекта сущности

Аватар пользователя mmjmm mmjmm 26 августа 2022 в 8:43

hook_form_alter мне нужен не только для этого. Там еще и другие действия есть. Да, не так выразился, действительно из объекта сущности.

Аватар пользователя OldWarrior OldWarrior 26 августа 2022 в 8:41
1

Первый вопрос: где именно получить - т.е. на каком шаге?

$form_state->getValue('FIELD_NAME') работает в функции сабмита (т.е. после отправки формы) и возвращает значение запрошенного поля.

Есть ещё $form_state->getValues(), которая тоже может быть полезна на этапе сабмита и которая возвращает массив значений всех полей формы после её отправки.

Если нужно получать значение (как оно уже сохранено в сущности) при построении формы (т.е. в методе ::buildForm() или в имплементации hook_FORM_ID_form_alter), то следует читать это значение из собственно сущности, например: $entity->get('uid'). Разумеется, сначала нужно получить загруженную в форму сущность с помощью $form_state->getFormObject():

<?php
$form_object 
$form_state->getFormObject();
if (
$form_object instanceof EntityForm) {
  
$entity $form_object->getEntity();
  
$uid $entity->get('uid');
}
?>