it-swarm.com.de

Holen Sie sich alle Felder in einem Bundle definiert

um alle in einem Inhaltstyp verwendeten Felder abzurufen, verwende ich in Drupal 7) den folgenden Code.

$fields = field_info_instances('node', 'article');

Was ist das Äquivalent für Drupal 8?

16
Pravin Ajaaz

Ich habe es mit getFieldDefinitions() erreicht, das in Class EntityManager Definiert ist. Um alle Felder in einem bestimmten Bundle zu verwenden, ist hier ein Weg:

$bundle_fields = \Drupal::entityManager()->getFieldDefinitions('node', 'article');

Das obige $bundle_fields Enthält jedoch auch nid, uuid, revisions, langcode, etc Als Felder. Um eine genaue Ausgabe zu erhalten, habe ich Folgendes gemacht:

  $entity_type_id = 'node';
  $bundle = 'article';
  foreach (\Drupal::entityManager()->getFieldDefinitions($entity_type_id, $bundle) as $field_name => $field_definition) {
    if (!empty($field_definition->getTargetBundle())) {
      $bundleFields[$entity_type_id][$field_name]['type'] = $field_definition->getType();
      $bundleFields[$entity_type_id][$field_name]['label'] = $field_definition->getLabel();
    }
  }
25
Pravin Ajaaz

EntityManager ist in Zukunft veraltet. Folgendes kann stattdessen verwendet werden:

$entityFieldManager = \Drupal::service('entity_field.manager');
$fields = $entityFieldManager->getFieldDefinitions($entity_type, $bundle);
32
NewZeal

EntityManager ist veraltet und ich habe den nächsten Code verwendet. Ich habe der Controller-Klasse hinzugefügt:

 /**
   * The entity field manager.
   *
   * @var \Drupal\Core\Entity\EntityFieldManager
   */
  protected $entityFieldManager;

  /**
   * Constructor.
   *
   * @param \Drupal\Core\Entity\EntityFieldManager $entity_field_manager
   *   The entity field manager.
   */
  public function __construct(EntityFieldManager $entity_field_manager) {
    $this->entityFieldManager = $entity_field_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_field.manager')
    );
  }

// Hier einige deiner Funktionen

 /**
   * Build table rows.
   */
  protected function buildRows() {
    $entity_type_id = 'node';
    $bundle = 'article';
$fields = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle);
foreach ($fields as $field_name => $field_definition) {
  if (!empty($field_definition->getTargetBundle())) {               
    $listFields[$field_name]['type'] = $field_definition->getType();
    $listFields[$field_name]['label'] = $field_definition->getLabel();                  
  }
}
$rows = [];
foreach ($listFields as $field_name => $info) {
  $rows[] = $this->buildRow($info, $field_name);
}
return $rows;

}}

https://www.drupal.org/node/2549139 es wurde mir geholfen

6
Maria