web-dev-qa-db-fra.com

Obtenir les paramètres d'une instance de champ

Quel est l'équivalent de field_info_instance() pour Drupal 8?

Les paramètres de champ par défaut sont stockés en tant que configuration dans un fichier comme field.field.ENTITYTYPE.BUNDLE.FIELDNAME.yml, mais comment puis-je obtenir leur valeur actuelle?

8
masterchief

En utilisant le service entity_field.manager, vous pouvez obtenir un tableau de classes BaseFieldDefinition. Ce service est également injectable, mais pour le code de travail copier-coller, vous pouvez effectuer les opérations suivantes:

$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);
9
masterchief

Utilisation d'une instance de champ:

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

Par exemple, dans un widget de champ:

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

Je voulais obtenir le type et l'étiquette de la définition du champ. Cela n'a pas fonctionné:

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

Cela a fonctionné:

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

La façon la plus simple d'obtenir la configuration de champ est d'utiliser 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);
0
Antoine Subit