Что эквивалентно field_info_instance()
Drupal 8?
Настройки поля по умолчанию хранятся в виде конфигурации в файле, подобном field.field.ENTITYTYPE.BUNDLE.FIELDNAME.yml, но как мне получить их текущее значение?
Что эквивалентно field_info_instance()
Drupal 8?
Настройки поля по умолчанию хранятся в виде конфигурации в файле, подобном field.field.ENTITYTYPE.BUNDLE.FIELDNAME.yml, но как мне получить их текущее значение?
Ответы:
Используя сервис entity_field.manager , вы можете получить массив классов BaseFieldDefinition. Этот сервис также является инъекционным, но для рабочего кода копирования-вставки вы можете сделать следующее:
$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);
Используя экземпляр поля:
$settings = $field->getFieldDefinition()->getSettings();
Например, в виджете поля:
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;
}
Самый простой способ получить конфигурацию поля - использовать 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);