Điểm:2

Làm cách nào để đặt ràng buộc xác thực cho các trường cơ sở như tên thuật ngữ phân loại?

lá cờ cn

Tôi gặp sự cố khi đặt giới hạn xác thực đối với tên của thuật ngữ phân loại.

function MYMODULE_entity_bundle_field_info_alter(&$fields, $entity_type, $bundle) {
  if ($entity_type->id() === 'taxonomy_term' && $bundle === 'my_taxonomy_type') {
    kint($fields['tên']);
    if (isset($fields['name'])) {
      kint('tên đã tìm thấy');
    }
  }
}

Khi tôi xây dựng lại bộ đệm bằng drush, kint() xuất ra giá trị của $fields['name'] như vô giá trị.

Khi tôi sử dụng kint() để xuất giá trị của trường $, Tôi thấy điều này:

mảng (4) [
    'cha mẹ' => Drupal\Core\Field\BaseFieldDefinition (7) (
        'loại' được bảo vệ -> chuỗi (16) "entity_reference"
        được bảo vệ 'propertyDefinitions' -> null
        'lược đồ' được bảo vệ -> null
        'chỉ mục' được bảo vệ -> mảng (0) []
        được bảo vệ 'itemDefinition' -> Drupal\Core\Field\TypedData\FieldItemDataDefinition (3) (
            được bảo vệ 'fieldDefinition' -> Drupal\Core\Field\BaseFieldDefinition (7) RECURSION
            'định nghĩa' được bảo vệ -> mảng (2) [
                'loại' => chuỗi (27) "field_item:entity_reference"
                'cài đặt' => mảng (3) [
                    'target_type' => chuỗi (13) "taxonomy_term"
                    'xử lý' => chuỗi (7) "mặc định"
                    'handler_settings' => mảng (1) [
                        'target_bundles' => mảng (1) GIỚI HẠN ĐỘ SÂU
                    ]
                ]
            ]
            được bảo vệ 'typedDataManager' -> null
        )
        'định nghĩa' được bảo vệ -> mảng (7) [
            'nhãn' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                được bảo vệ 'đã dịchMarkup' -> null
                'tùy chọn' được bảo vệ -> mảng (0) []
                được bảo vệ 'stringTranslation' -> null
                'chuỗi' được bảo vệ -> chuỗi (12) "Phụ huynh hạn"
                'đối số' được bảo vệ -> mảng (0) []
            )
            'mô tả' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                được bảo vệ 'đã dịchMarkup' -> null
                'tùy chọn' được bảo vệ -> mảng (0) []
                được bảo vệ 'stringTranslation' -> null
                protected 'string' -> string (25) "Cha mẹ của thuật ngữ này."
                'đối số' được bảo vệ -> mảng (0) []
            )
            'cardinality' => số nguyên -1
            'nhà cung cấp' => chuỗi (8) "phân loại"
            'field_name' => chuỗi (6) "cha mẹ"
            'entity_type' => chuỗi (13) "taxonomy_term"
            'bó' => chuỗi (18) "my_taxonomy_type"
        ]
        được bảo vệ 'typedDataManager' -> null
    )
    'field_int_count' => Drupal\field\Entity\FieldConfig (35) (
        được bảo vệ 'đã xóa' -> boolean sai
        ... cắt tỉa
        'id' được bảo vệ -> chuỗi (56) "taxonomy_term.card_group_private.field_term_date_created"
        'field_name' được bảo vệ -> chuỗi (23) "field_term_date_created"
        được bảo vệ 'field_type' -> chuỗi (8) "datetime"
        ... cắt tỉa

"taxonomy_term.card_group_private.field_term_ref_author" được bảo vệ 'field_name' -> chuỗi (21) "field_term_ref_author" được bảo vệ 'field_type' -> chuỗi (16) "entity_reference" ]

Các Tên lĩnh vực này là hư không được tìm thấy. Làm cách nào tôi có thể thêm một ràng buộc vào tên thuật ngữ phân loại?

Điểm:4
lá cờ cn

Hãy thử một hook khác cho các trường cơ sở:

/**
 * Triển khai hook_entity_base_field_info_alter().
 */
function mymodule_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'taxonomy_term') {
    $fields['foo']->addConstraint('Length', ['min' => 5]);
  }
}

Nếu trường có các phần ghi đè cụ thể theo gói, bạn có thể cần sử dụng cả hai hook. Nhìn thấy https://www.drupal.org/project/drupal/issues/3193351

Ví dụ cho cả hai hook được tìm thấy trong mô-đun contrib https://git.drupalcode.org/project/node_title_validation/-/blob/8.x-1.x/node_title_validation.module

Điểm:2
lá cờ cn

Tên trường trong phân loại là một baseField không phải là một bundleField, vì vậy bạn nên sử dụng HOOK_entity_base_field_info_alter thay vào đó để thêm định nghĩa tùy chỉnh cho nó

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.