У меня есть форма создания пользовательского узла, которую я визуализирую в хуке предварительной обработки представлений. В этой форме у меня есть два поля ссылки на сущность. Я устанавливаю [#value] и [#default_value] этих ссылочных полей программно.
При отправке формы значения, которые я установил, создаются, но только если поля доступны для редактирования пользователем. Я хочу сделать поля "отключенными" и/или "скрытыми" от пользователя. Не только скрытый с помощью CSS, но и весь виджет автозаполнения становится недоступным. Поле должно быть типа «скрытое».
Как сделать ссылку на объект автозаполнения отключенной и/или недоступной для пользователя, создающего контент?
Или, другими словами, как я могу программно добавлять значения ссылки на сущность при отправке формы, чтобы пользователь не мог взаимодействовать с полями?
Вот некоторые вещи, которые я пробовал, но они не работают:
- $form['field_entity_reference']['#access'] = false; // Кажется, что установка #access в false должна работать, потому что поля формы все еще существуют при отладке $form, но это не работает, поскольку предотвращает отправку значения.
- Добавление ['#attributes']['только для чтения'], изменение ['#type'] на скрытый или другой тип виджета, добавление ['#attributed']['disabled']. Ни один не работает
- Предварительное заполнение сущности - Это не работает для этой конкретной ситуации, так как некоторые значения не могут быть предоставлены токенами.
Код для справки
функция <тема>_preprocess_views_view_field(&$variables) {
$ вид = $ переменные ['представление'];
если ($view->id() == '<view>') {
$поле = $переменные['поле'];
переключатель ($ field-> параметры ['id']) {
случай '<view_field>':
$node = \Drupal::entityTypeManager()
->getStorage('узел')
->create(['type' => '<node_type>']);
$form = \Drupal::service('entity.form_builder')->getForm($node, 'вторичный');
// Установить default_value и значение
$form['field_entity_reference']['widget']['#default_value'] = (int)$cid; // Обратите внимание, что здесь используется виджет «список выбора» для поля ссылки на сущность
$form['field_entity_reference']['widget']['#value'] = (int)$cid; // То же, что и выше
// Вещи, которые не работают. Значения не отправляются, если поле не редактируется пользователем или поле не скрыто/отключено
$form['field_entity_reference']['#access'] = false; // Значение не отправляется
$form['field_entity_reference']['widget'][0]['#attributes']['readonly'] = 'readonly'; // Не делает поле доступным только для чтения
$form['field_entity_reference']['widget'][0]['value']['#type'] = 'скрытый'; // Кажется, виджет автозаполнения и виджет выбора не имеют «скрытого» типа
$form['field_entity_reference']['widget'][0]['target_id']['#type'] = 'textfield'; // Кажется, нельзя изменить тип на текстовое поле
// Изменяем вывод поля просмотра на форму
$variables['output'] = $form;
сломать;
}
}
}