Puncte:0

Cum pot seta reguli de validare pe câmpurile entității mele și cum pot obține erori dacă datele nu sunt valide

drapel ye

Am această entitate care a primit câmpul link

Această legătură este obligatorie, trebuie să aibă mai mult de 3 caractere și mai puțin de 255 De asemenea, trebuie să fie o adresă URL validă

clasa Myentity extinde ContentEntityBase implementează BaseEntityInterface {

  utilizați EntityChangedTrait;

  funcția publică statică baseFieldDefinitions( EntityTypeInterface $entity_type )
  {
    $fields = parent::baseFieldDefinitions($entity_type);

    $fields['link'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Url'))
      ->setDescription(t('Adresa URL a entității.'))
      ->setSettings(
        [
          'default_value' => ''',
          'min_length' => 3,
          'max_length' => 255,
          'text_processing' => 0,
        ]
      )->setRequired(true)
      ->addConstraint('Lungime', ['min' => 3, 'max' => 255]);

  }


}

Și apoi undeva în aplicație, vreau să salvez acea entitate

$date = ['link': 'X'];

$entity = Myentity::create($date);

$violationList = $entity->validate();

echo $violationList->count(); //Tipărește 0 ! deși lungimea nu este bună!

setRequired (adevărat) îmi garantează că domeniul legătură este obligatoriu

addConstraint('Lungime', ['min' => 3, 'max' => 255]) Nu pare să funcționeze, deoarece nu am primit nicio eroare la validarea datelor

Deci am câteva întrebări despre acest cod:

  1. Cum setăm regulile de validare pentru o entitate, am văzut două funcții addConstraint și setPropertyConstraints. pe care să-l folosești sau există o altă cale?

  2. După validarea datelor, și dacă $violationList->count() este pozitiv, cum obținem regulile care au eșuat, știu $violationList->getFieldNames() returnează câmpul nevalid, dar nu regula care a eșuat.

  3. Și, în sfârșit, care sunt regulile pe care Drupal 9 le oferă, sunt cele care sunt livrate cu componentele Symfony Validator, așa cum se menționează în documentația Drupal SAU există o listă definită.

apaderno avatar
drapel us
Câmpul de entitate *șir* are doar setarea *max_length* și asta funcționează, deoarece este folosit din [`Node::baseFieldDefinitions()`](https://api.drupal.org/api/drupal/core%21modules %21node%21src%21Entity%21Node.php/function/Node%3A%3AbaseFieldDefinitions/9.3.x). Nu este nevoie să adăugați o constrângere pentru asta, care este deja adăugată din [`StringItem::getConstraints`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Field%21Plugin %21Field%21FieldType%21StringItem.php/function/StringItem%3A%3AgetConstraints/9.3.x).
Puncte:2
drapel ph

Folosesc addConstraint în entitățile mele personalizate și nu am avut nicio problemă. Văd că definiția câmpului tău este pentru „nume”, dar datele tale spun „link”, poate de aceea?

Iată un fragment pentru obținerea erorilor:

    $încălcări = $entity->validate();
    $erori = [];
    foreach ($încălcări ca $încălcare) {
      $proprietate = $violation->getPropertyPath();
      $câmp = explode('.', $proprietate)[0];
      $label = $entity->get($field)->getFieldDefinition()->getLabel();
      $erori[] = $label . ':' . $încălcare->getMessage();
    }

Există o listă de constrângeri de bază aici:

https://api.drupal.org/api/drupal/vendor!symfony!validator!ConstraintValidator.php/class/uses/ConstraintValidator/9.3.x

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.