Score:2

วิธีตั้งค่าข้อจำกัดการตรวจสอบความถูกต้องสำหรับฟิลด์พื้นฐาน เช่น ชื่อคำอนุกรมวิธาน

ธง cn

ฉันมีปัญหาในการตั้งค่าข้อจำกัดการตรวจสอบชื่อของคำศัพท์อนุกรมวิธาน

ฟังก์ชัน MYMODULE_entity_bundle_field_info_alter(&$fields, $entity_type, $bundle) {
  ถ้า ($entity_type->id() === 'taxonomy_term' && $bundle === 'my_taxonomy_type') {
    kint($fields['ชื่อ']);
    ถ้า (isset($fields['name'])) {
      kint('พบชื่อ');
    }
  }
}

เมื่อฉันสร้างแคชใหม่ด้วย drush ญาติ () ส่งออกค่าของ $fields['ชื่อ'] เช่น โมฆะ.

เมื่อฉันใช้ ญาติ () เพื่อส่งออกค่าของ $ฟิลด์ฉันเห็นสิ่งนี้:

อาร์เรย์ (4) [
    'พาเรนต์' => Drupal\Core\Field\BaseFieldDefinition (7) (
        ป้องกัน 'ประเภท' -> สตริง (16) "entity_reference"
        ป้องกัน 'propertyDefinitions' -> null
        ป้องกัน 'สคีมา' -> null
        ป้องกัน 'ดัชนี' -> อาร์เรย์ (0) []
        ป้องกัน 'itemDefinition' -> Drupal\Core\Field\TypedData\FieldItemDataDefinition (3) (
            ป้องกัน 'fieldDefinition' -> Drupal\Core\Field\BaseFieldDefinition (7) การเรียกซ้ำ
            ป้องกัน 'คำจำกัดความ' -> อาร์เรย์ (2) [
                'type' => string (27) "field_item:entity_reference"
                'settings' => อาร์เรย์ (3) [
                    'target_type' => สตริง (13) "taxonomy_term"
                    'ตัวจัดการ' => สตริง (7) "ค่าเริ่มต้น"
                    'handler_settings' => อาร์เรย์ (1) [
                        'target_bundles' => อาร์เรย์ (1) ขีดจำกัดความลึก
                    ]
                ]
            ]
            ป้องกัน 'typedDataManager' -> null
        )
        ป้องกัน 'คำจำกัดความ' -> อาร์เรย์ (7) [
            'label' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                ป้องกัน 'translatedMarkup' -> null
                'ตัวเลือก' ที่ได้รับการป้องกัน -> อาร์เรย์ (0) []
                ป้องกัน 'stringTranslation' -> null
                'string' ที่ได้รับการป้องกัน -> string (12) "Term parent"
                ป้องกัน 'อาร์กิวเมนต์' -> อาร์เรย์ (0) []
            )
            'description' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                ป้องกัน 'translatedMarkup' -> null
                'ตัวเลือก' ที่ได้รับการป้องกัน -> อาร์เรย์ (0) []
                ป้องกัน 'stringTranslation' -> null
                'สตริง' ที่ได้รับการป้องกัน -> สตริง (25) "ผู้ปกครองของคำนี้"
                ป้องกัน 'อาร์กิวเมนต์' -> อาร์เรย์ (0) []
            )
            'จำนวนสมาชิก' => จำนวนเต็ม -1
            'provider' => string (8) "อนุกรมวิธาน"
            'field_name' => สตริง (6) "พาเรนต์"
            'entity_type' => สตริง (13) "taxonomy_term"
            'มัด' => สตริง (18) "my_taxonomy_type"
        ]
        ป้องกัน 'typedDataManager' -> null
    )
    'field_int_count' => Drupal\field\Entity\FieldConfig (35) (
        ป้องกัน 'ลบ' -> บูลีนเท็จ
        ... ตัด
        ป้องกัน 'รหัส' -> สตริง (56) "taxonomy_term.card_group_private.field_term_date_created"
        ป้องกัน 'field_name' -> สตริง (23) "field_term_date_created"
        ป้องกัน 'field_type' -> สตริง (8) "วันที่และเวลา"
        ... ตัด

"taxonomy_term.card_group_private.field_term_ref_author" ป้องกัน 'field_name' -> สตริง (21) "field_term_ref_author" ป้องกัน 'field_type' -> สตริง (16) "entity_reference" ]

เดอะ ชื่อ หาสนามไม่เจอเลย ฉันจะเพิ่มข้อจำกัดให้กับชื่อคำศัพท์ทางอนุกรมวิธานได้อย่างไร

Score:4
ธง cn

ลองใช้ hook อื่นสำหรับฟิลด์ฐาน:

/**
 * ใช้ hook_entity_base_field_info_alter()
 */
ฟังก์ชัน mymodule_entity_base_field_info_alter (&$fields, EntityTypeInterface $entity_type) {
  ถ้า ($entity_type->id() === 'taxonomy_term') {
    $fields['foo']->addConstraint('ความยาว', ['นาที' => 5]);
  }
}

หากฟิลด์มีการแทนที่เฉพาะบันเดิล คุณอาจต้องใช้ทั้งสอง hooks ดู https://www.drupal.org/project/drupal/issues/3193351

ตัวอย่างสำหรับ hooks ทั้งสองที่พบในโมดูล contrib https://git.drupalcode.org/project/node_title_validation/-/blob/8.x-1.x/node_title_validation.module

Score:2
ธง cn

ชื่อฟิลด์ในอนุกรมวิธานเป็น baseField ไม่ใช่ bundleField ดังนั้นคุณควรใช้ HOOK_entity_base_field_info_alter แทนที่จะเพิ่มคำจำกัดความที่กำหนดเองเข้าไป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา