Я портирую модуль из Drupal 7 в Drupal 8. В настройках конфигурации этого модуля мне нужно получить список существующих в настоящее время типов полей.
В Drupal 7 это было достигнуто с помощью field_info_field_types()
функции.
В Drupal 8 (8.0.0-rc3) я получаю сообщение об ошибке «функция не существует», несмотря на то, что информация, указанная на справочной странице Drupal API , явно устарела.
Затем, исследуя, я нашел страницу DrupalContrib , где функция объявлена устаревшей, и предложил ее использовать Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions()
.
Но его использование вызывает еще одну ошибку «Неизвестный сервис plugin.manager.entity.field.field_type», к счастью связанный с предложением «Вы имеете в виду plugin.manager.field.field_type?»
Поэтому я попытался использовать Drupal::service('plugin.manager.field.field_type')->getDefinitions()
и ничего себе: я получил ожидаемый массив типов полей.
Но каждый член массива (один тип поля) теперь является объектом (а не дочерним массивом), и искомые данные вложены в защищенные свойства, поэтому я не могу получить к ним доступ.
На этом этапе я застрял. Я подумал, что может существовать некоторый класс, который я мог бы расширить, чтобы перемещаться по этим данным, но без удачи: я даже не мог понять, какой компонент в Drupal 8, где определения типов полей централизованы.