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:
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?
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.
Ș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ă.