Obter as configurações de uma instância de campo

8

Qual é o equivalente field_info_instance()para o Drupal 8?

As configurações de campo padrão são armazenadas como configuração em um arquivo como field.field.ENTITYTYPE.BUNDLE.FIELDNAME.yml, mas como obtenho seu valor atual?

lenço
fonte

Respostas:

9

Usando o serviço entity_field.manager , você pode obter uma matriz de classes BaseFieldDefinition. Este serviço também é injetável, mas para copiar e colar código de trabalho, você pode fazer o seguinte:

$bundle_fields = \Drupal::getContainer()->get('entity_field.manager')->getFieldDefinitions($entity_type, $bundle);
$field_definition = $bundle_fields[$field_name];
$catalog_id = $field_definition->getSetting($setting_name);
lenço
fonte
4
Se você tem uma entidade e está trabalhando com isso, também pode acessar as definições de campo do seu objeto de entidade com $ entity-> getFieldDefinitions ().
22416 Berdir
2

Usando uma instância de campo:

$settings = $field->getFieldDefinition()->getSettings();

Por exemplo, em um widget de campo:

public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
  $element = [];

  // Get the settings.
  $settings = $items[$delta]->getFieldDefinition()->getSettings();

  // ... build render array

  return $element;
}
Tim
fonte
0

Eu queria obter o Type e Label da definição de campo. Isso não funcionou:

$setting_name = 'label';
$label = $field_definition->getSetting($setting_name);

Isso funcionou:

$label = $field_definition->getLabel();
$type = $field_definition->getType();
andres_de
fonte
0

A maneira mais simples de obter a configuração do campo é usar o EntityTypeManager .

$entity_type = 'node';// node, taxonomy_term, taxonomy_vocabulary, ...
$bundle = 'article';// the content type machine name
$field = 'field_article_tags';// the field machine name

$fieldConfig =  \Drupal::entityTypeManager()
  ->getStorage('field_config')
  ->load($entity_type . '.' . $bundle . '.' . $field);
Antoine Subit
fonte