Je porte un module de Drupal 7 vers Drupal 8. Dans les paramètres de configuration de ce module, j'ai besoin d'obtenir la liste des types de champs actuellement existants.
Dans Drupal 7, cela a été réalisé en utilisant la field_info_field_types()
fonction.
Dans Drupal 8 (8.0.0-rc3), j'obtiens une erreur "la fonction n'existe pas", malgré les informations indiquées par une page d'aide de référence de l'API Drupal , clairement obsolète.
En enquêtant, j'ai trouvé une page DrupalContrib , où la fonction est déclarée obsolète, et propose maintenant de l'utiliser Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions()
.
Mais son utilisation déclenche une autre erreur "Service inconnu plugin.manager.entity.field.field_type", heureusement associée à la suggestion "Voulez-vous dire plugin.manager.field.field_type?"
J'ai donc essayé d'utiliser Drupal::service('plugin.manager.field.field_type')->getDefinitions()
et wow: j'ai obtenu le tableau attendu des types de champs.
Mais chaque membre du tableau (un type de champ) est maintenant un objet (au lieu d'un tableau enfant), et les données que je recherche sont imbriquées dans des propriétés protégées, donc je ne peux pas y accéder.
À ce stade, je suis coincé. J'ai pensé qu'il pourrait exister une classe que je pourrais développer pour parcourir ces données, mais sans succès: je n'ai même pas pu comprendre quel est le composant de Drupal 8 où les définitions de types de champs sont centralisées.