У меня есть этот объект, который получил поле ссылки
Эта ссылка обязательна, должна содержать более 3 символов и менее 255 символов.
Также это должен быть действительный URL
класс Myentity расширяет ContentEntityBase, реализует BaseEntityInterface {
использовать EntityChangedTrait;
общедоступная статическая функция baseFieldDefinitions (EntityTypeInterface $entity_type)
{
$fields = parent::baseFieldDefinitions($entity_type);
$fields['ссылка'] = BaseFieldDefinition::create('строка')
->setLabel(t('URL'))
->setDescription(t('URL объекта.'))
-> установить настройки (
[
'значение_по умолчанию' => '',
'мин_длина' => 3,
'max_length' => 255,
'текстовая_обработка' => 0,
]
)->setRequired(истина)
->addConstraint('Длина', ['min' => 3, 'max' => 255]);
}
}
А потом где-то в приложении я хочу сохранить эту сущность
$data = ['ссылка': 'X'];
$entity = Myentity::create($data);
$violationList = $entity->validate();
эхо $violationList->count(); // Печатает 0! хотя длина не очень!
setRequired (истина)
гарантирует мне, что поле соединять
является обязательным
addConstraint('Длина', ['минимум' => 3, 'максимум' => 255])
Кажется, не работает, так как я не получил никаких ошибок при проверке моих данных
Итак, у меня есть несколько вопросов об этом коде:
Как мы устанавливаем правила проверки для сущности, я видел две функции добавить ограничение
и setPropertyConstraints
. какой использовать или есть другой способ?
После проверки данных, и если $нарушениеСписок->количество()
является положительным, как мы получаем правила, которые не сработали, я знаю $violationList->getFieldNames()
возвращает недопустимое поле, но не правило, которое не удалось.
И, наконец, какие правила предоставляет Drupal 9, поставляются ли они с компонентами Symfony Validator, как указано в документации Drupal, ИЛИ существует определенный список.