Puncte:2

Cum să setați o constrângere de validare pentru câmpurile de bază, cum ar fi numele termenului de taxonomie?

drapel cn

Întâmpin probleme la stabilirea unei constrângeri de validare pentru numele termenului de taxonomie.

funcția MYMODULE_entity_bundle_field_info_alter(&$câmpuri, $entity_type, $bundle) {
  if ($entity_type->id() === 'termen_taxonomie' && $bundle === 'my_taxonomy_type') {
    kint($fields['nume']);
    if (isset($fields['nume'])) {
      kint('nume găsit');
    }
  }
}

Când reconstruiesc memoria cache cu drush, kint() scoate valoarea lui $fields['nume'] la fel de nul.

Când folosesc kint() pentru a scoate valoarea de $câmpuri, Vad asta:

matrice (4) [
    'parent' => Drupal\Core\Field\BaseFieldDefinition (7) (
        protejat „tip” -> șir (16) „entity_reference”
        protejat 'propertyDefinitions' -> null
        „schemă” protejată -> nul
        „indexuri” protejate -> matrice (0) []
        protejat „itemDefinition” -> Drupal\Core\Field\TypedData\FieldItemDataDefinition (3) (
            „fieldDefinition” protejat -> Drupal\Core\Field\BaseFieldDefinition (7) RECURSIUNE
            „definiție” protejată -> matrice (2) [
                'type' => șir (27) "field_item:entity_reference"
                'settings' => matrice (3) [
                    'target_type' => șir (13) "taxonomy_term"
                    „handler” => șir (7) „implicit”
                    'handler_settings' => matrice (1) [
                        'target_bundles' => matrice (1) DEPTH LIMIT
                    ]
                ]
            ]
            protejat „typedDataManager” -> nul
        )
        „definiție” protejată -> matrice (7) [
            'label' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                protejat „translatedMarkup” -> nul
                „Opțiuni” protejate -> matrice (0) []
                protejat „stringTranslation” -> nul
                „șir” protejat -> șir (12) „Părinți la termen”
                „argumente” protejate -> matrice (0) []
            )
            'description' => Drupal\Core\StringTranslation\TranslatableMarkup (5) (
                protejat „translatedMarkup” -> nul
                „Opțiuni” protejate -> matrice (0) []
                protejat „stringTranslation” -> nul
                protected 'string' -> string (25) "Părinții acestui termen."
                „argumente” protejate -> matrice (0) []
            )
            'cardinalitate' => întreg -1
            „provider” => șir (8) „taxonomie”
            „field_name” => șir (6) „părinte”
            'entity_type' => șir (13) "taxonomy_term"
            „bundle” => șir (18) „my_taxonomy_type”
        ]
        protejat „typedDataManager” -> nul
    )
    'field_int_count' => Drupal\field\Entity\FieldConfig (35) (
        protejat „șters” -> boolean false
        ... a tăia
        „id” protejat -> șir (56) „taxonomy_term.card_group_private.field_term_date_created”
        protejat „field_name” -> șir (23) „field_term_date_created”
        protejat „field_type” -> șir (8) „datetime”
        ... a tăia

„taxonomy_term.card_group_private.field_term_ref_author” protejat „field_name” -> șir (21) „field_term_ref_author” protejat „field_type” -> șir (16) „entity_reference” ]

The Nume câmpul nu se găsește nicăieri. Cum pot adăuga o constrângere la numele termenilor de taxonomie?

Puncte:4
drapel cn

Încercați un alt cârlig pentru câmpurile de bază:

/**
 * Implementează hook_entity_base_field_info_alter().
 */
function mymodule_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'termen_taxonomie') {
    $fields['foo']->addConstraint('Length', ['min' => 5]);
  }
}

Dacă câmpul are suprascrieri specifice unui pachet, poate fi necesar să utilizați ambele cârlige. Vedea https://www.drupal.org/project/drupal/issues/3193351

Exemplu pentru ambele cârlige găsite într-un modul contrib https://git.drupalcode.org/project/node_title_validation/-/blob/8.x-1.x/node_title_validation.module

Puncte:2
drapel cn

Numele câmpului din taxonomie este un câmp de bază, nu un câmp bundleField, așa că ar trebui mai degrabă să îl utilizați HOOK_entity_base_field_info_alter în schimb pentru a adăuga definiție personalizată

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.