Рейтинг:2

Как установить ограничение проверки для базовых полей, таких как имя термина таксономии?

флаг cn

У меня возникли проблемы с установкой ограничения проверки имени термина таксономии.

function MYMODULE_entity_bundle_field_info_alter(&$fields, $entity_type, $bundle) {
  if ($entity_type->id() === 'taxonomy_term' && $bundle === 'my_taxonomy_type') {
    вид ($ поля ['имя']);
    если (isset($fields['имя'])) {
      kint('найдено имя');
    }
  }
}

Когда я перестраиваю кеш с помощью drush, вид() выводит значение $поля['имя'] как ноль.

Когда я использую вид() вывести значение $поля, Я вижу это:

массив (4) [
    'родительский' => Drupal\Core\Field\BaseFieldDefinition (7) (
        защищенный 'тип' -> строка (16) "entity_reference"
        защищенный 'propertyDefinitions' -> ноль
        защищенная «схема» -> ноль
        защищенные «индексы» -> массив (0) []
        защищенный 'itemDefinition' -> Drupal\Core\Field\TypedData\FieldItemDataDefinition (3) (
            защищенное 'fieldDefinition' -> Drupal\Core\Field\BaseFieldDefinition (7) РЕКУРСИЯ
            защищенное «определение» -> массив (2) [
                'type' => строка (27) "field_item:entity_reference"
                'настройки' => массив (3) [
                    'target_type' => строка (13) "taxonomy_term"
                    'обработчик' => строка (7) "по умолчанию"
                    'handler_settings' => массив (1) [
                        'target_bundles' => массив (1) ОГРАНИЧЕНИЕ ГЛУБИНЫ
                    ]
                ]
            ]
            защищенный 'typedDataManager' -> ноль
        )
        защищенное «определение» -> массив (7) [
            'label' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                защищенный 'translatedMarkup' -> ноль
                защищенные «параметры» -> массив (0) []
                защищенный 'stringTranslation' -> ноль
                защищенная 'строка' -> строка (12) "Родители терминов"
                защищенные «аргументы» -> массив (0) []
            )
            'description' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                защищенный 'translatedMarkup' -> ноль
                защищенные «параметры» -> массив (0) []
                защищенный 'stringTranslation' -> ноль
                protected 'string' -> string (25) «Родители этого термина».
                защищенные «аргументы» -> массив (0) []
            )
            'количество элементов' => целое число -1
            'провайдер' => строка (8) "таксономия"
            'field_name' => строка (6) "родительский"
            'entity_type' => строка (13) "taxonomy_term"
            'bundle' => строка (18) "my_taxonomy_type"
        ]
        защищенный 'typedDataManager' -> ноль
    )
    'field_int_count' => Drupal\field\Entity\FieldConfig (35) (
        защищено 'удалено' -> логическое значение false
        ... резать
        защищенный 'id' -> строка (56) "taxonomy_term.card_group_private.field_term_date_created"
        защищенное 'field_name' -> строка (23) "field_term_date_created"
        защищенный 'field_type' -> строка (8) "datetime"
        ... резать

"taxonomy_term.card_group_private.field_term_ref_author" защищенное 'field_name' -> строка (21) "field_term_ref_author" защищенный 'field_type' -> строка (16) "entity_reference" ]

имя поля нигде нет. Как я могу добавить ограничение на имена терминов таксономии?

Рейтинг:4
флаг cn

Попробуйте другой хук для базовых полей:

/**
 * Реализует hook_entity_base_field_info_alter().
 */
function mymodule_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
  если ($entity_type->id() === 'taxonomy_term') {
    $fields['foo']->addConstraint('Длина', ['min' => 5]);
  }
}

Если поле имеет переопределения, специфичные для пакета, вам может потребоваться использовать оба хука. Видеть https://www.drupal.org/project/drupal/issues/3193351

Пример для обоих хуков, найденных в модуле contrib https://git.drupalcode.org/project/node_title_validation/-/blob/8.x-1.x/node_title_validation.module

Рейтинг:2
флаг cn

Имя поля в таксономии - это baseField, а не bundleField, поэтому вам лучше использовать HOOK_entity_base_field_info_alter вместо того, чтобы добавить к нему пользовательское определение

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.