【问题标题】:How to create Hidden type Field in Drupal 8 Entity如何在 Drupal 8 实体中创建隐藏类型字段
【发布时间】:2017-07-24 07:25:55
【问题描述】:

我正在使用drupal 8,我有一个实体,我想在实体表单中添加一个隐藏类型字段。如何添加隐藏字段类型?如下所示

<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;
}

【问题讨论】:

    标签: drupal drupal-8


    【解决方案1】:

    在 drupal 8 实体表单中隐藏字段有两个步骤。

    1. 如果您想隐藏现有字段,您可以更改表单并将该字段更新为

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

    2. 您可以使用https://www.drupal.org/project/field_hidden 并通过启用此模块,在实体类型的“管理表单显示”对话框中为字段选择“隐藏字段”小部件。

    【讨论】:

      【解决方案2】:

      如果您只使用 UI,您可以在“管理表单显示”中禁用字段的显示。但我假设您要求自己的编码表格......就像这样:

      $form['my_hidden'] = array(
          '#type' => 'hidden',
          '#value' => $my_hidden_value, 
      );
      

      【讨论】:

      • 谢谢@Arioch,很抱歉我忘了提到drupal版本,我正在使用drupal 8。我也更新了我的问题。
      • 我只使用 Drupal8。您能显示生成表单的代码吗?
      • 因此您必须执行 Satyam Bhardwaz 给出的第一个解决方案。但这意味着您将使用这样的 hook_form_alter:api.drupal.org/api/drupal/…
      • 无需修改钩子,我的代码工作是:$form['price'] = array( '#type' =&gt; 'hidden', '#attributes' =&gt; array( 'id' =&gt; 'price', ), '#default_value' =&gt; $session_price, );
      • 好的,所以它是“#default_value”而不是像我一样的“#value”。
      【解决方案3】:

      你可以试试这个:

      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;
      }
      

      【讨论】:

      • 我试过了,但它隐藏了表单中的字段或没有在表单中创建字段。
      • 它应该只是隐藏该字段,因为当您显示“表单”时,您会告诉您希望该字段为“type=hidden”。你试过了,它根本没有创建字段?
      • Arioch,感谢您的帮助和时间。是的,它根本不创建字段,我认为隐藏意味着不在表单中呈现字段。
      【解决方案4】:

      您可以像定义任何其他字段一样创建要隐藏的字段,然后在实体表单的 buildForm 方法中设置以下内容

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

      这将使该字段成为隐藏字段

      【讨论】:

        【解决方案5】:

        将'#access' =&gt; FALSE, 添加到表单元素数组中。

        【讨论】:

          猜你喜欢
          • 2020-08-31
          • 1970-01-01
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          • 2012-09-12
          • 2018-01-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多