Как создать поле скрытого типа в Drupal 8 Entity

Я использую drupal 8, у меня есть Entity, я хочу добавить поле скрытого типа в Entity Form. Как я могу добавить тип скрытого поля? как ниже

<form>
    <input type='hidden' name='my_hidden' />
</form>

Форма генерации кода выглядит следующим образом:

public static function baseFieldDefinitions(EntityTypeInterface $entity_type) 
{
   $fields = parent::baseFieldDefinitions($entity_type);
    $fields['id'] = BaseFieldDefinition::create('integer')
      ->setLabel(t('ID'))
      ->setDescription(t('The ID of the Timeslot entity.'))
      ->setReadOnly(TRUE);
    return $fields;
}

person fazalerabbi    schedule 24.07.2017    source источник


Ответы (5)


Есть два шага, чтобы сделать поле скрытым в формах сущностей drupal 8.

  1. Если вы хотите сделать существующее поле скрытым, вы можете изменить форму и обновить это поле как

    $form['your_field_name']['widget'][0]['value']['#type'] = 'скрытый';

  2. Вы можете использовать https://www.drupal.org/project/field_hidden и, включив этот модуль, выберите виджет «Скрытое поле» для поля в диалоговом окне «Управление отображением формы» типа объекта.

person Satyam Bhardwaz    schedule 25.07.2017

Если вы работаете только с UI, вы можете отключить отображение поля в «Управлении отображением формы». Но я предполагаю, что вы запрашиваете свою собственную закодированную форму... Это так:

$form['my_hidden'] = array(
    '#type' => 'hidden',
    '#value' => $my_hidden_value, 
);
person Arioch    schedule 24.07.2017
comment
Спасибо @Arioch, извините, я забыл упомянуть версию drupal, я использую drupal 8. Я также обновил свой вопрос. - person fazalerabbi; 25.07.2017
comment
Я работаю только с Drupal8. Можете ли вы показать код, который генерирует вашу форму? - person Arioch; 25.07.2017
comment
Таким образом, вы должны сделать 1-е решение, данное Сатьямом Бхардвазом. Но это означает, что вы будете использовать hook_form_alter следующим образом: /8.3.x" rel="nofollow noreferrer">api.drupal.org/api/drupal/ - person Arioch; 25.07.2017
comment
Нет необходимости переделывать хук, для меня работает код: $form['price'] = array( '#type' => 'hidden', '#attributes' => array( 'id' => 'price', ), '#default_value' => $session_price, ); - person fazalerabbi; 27.07.2017
comment
Итак, это #default_value, а не #value, как я. - person Arioch; 27.07.2017

Вы можете попробовать это:

public static function baseFieldDefinitions(EntityTypeInterface $entity_type) 
{
    $fields = parent::baseFieldDefinitions($entity_type);
    $fields['id'] = BaseFieldDefinition::create('integer')
        ->setLabel(t('ID'))
        ->setDescription(t('The ID of the Timeslot entity.'))
        ->setReadOnly(TRUE)
        ->setDisplayOptions('form', array(
            'type' => 'hidden',
            'weight' => -5,
        );
    return $fields;
}
person Arioch    schedule 25.07.2017
comment
Я пробовал это, но он скрывает поле из формы или не создает поле в форме. - person fazalerabbi; 25.07.2017
comment
Он должен просто скрыть поле, потому что вы говорите, что хотите, чтобы это поле было как type=hidden при отображении формы. Вы пробовали это, и это вообще не создает поле? - person Arioch; 25.07.2017
comment
Ариох, спасибо за помощь и время. Да, он вообще не создает поле, я думаю, что скрытый означает, что поле не отображается в форме. - person fazalerabbi; 25.07.2017

Вы можете создать поле, которое будет скрыто так же, как вы определяете любое другое поле, а затем в методе buildForm для формы сущности установите следующее

$form['field_name']['widget'][0]['value']['#type'] = 'hidden';

Это сделает поле скрытым.

person anoopjohn    schedule 06.12.2019

Добавьте '#access' => FALSE, в массив элементов формы.

person vuchkov    schedule 02.02.2021