Tôi có thực thể này có trường liên kết
Liên kết này là bắt buộc, phải dài hơn 3 ký tự và nhỏ hơn 255
Ngoài ra, nó phải là một URL hợp lệ
lớp Myentity mở rộng ContentEntityBase triển khai BaseEntityInterface {
sử dụng EntityChangedTrait;
hàm tĩnh công khai baseFieldDefinitions( EntityTypeInterface $entity_type )
{
$fields = parent::baseFieldDefinitions($entity_type);
$fields['link'] = BaseFieldDefinition::create('string')
->setLabel(t('Url'))
->setDescription(t('Url thực thể.'))
-> setSettings(
[
'giá_trị_mặc_định' => '',
'độ dài tối thiểu' => 3,
'độ dài tối đa' => 255,
'xử lý văn bản' => 0,
]
) -> setRequired(true)
->addConstraint('Chiều dài', ['tối thiểu' => 3, 'tối đa' => 255]);
}
}
Và sau đó ở đâu đó trong ứng dụng, tôi muốn lưu thực thể đó
$data = ['liên kết': 'X'];
$entity = Myentity::create($data);
$violationList = $entity->validate();
tiếng vang $violationList->count(); //In ra 0 ! mặc dù chiều dài không tốt!
setRequired(true)
đảm bảo với tôi rằng lĩnh vực này liên kết
là bắt buộc
addConstraint('Chiều dài', ['tối thiểu' => 3, 'tối đa' => 255])
Có vẻ như không hoạt động, vì tôi không gặp bất kỳ lỗi nào khi xác thực dữ liệu của mình
Vì vậy, tôi có một số câu hỏi về mã này:
Làm cách nào để chúng tôi đặt quy tắc xác thực cho một thực thể, tôi đã thấy hai chức năng thêmConstraint
và setPropertyConstraints
. cái nào để sử dụng hoặc có một cách khác?
Sau khi xác thực dữ liệu, và nếu $violationList->count()
là tích cực, Làm thế nào để chúng tôi có được các quy tắc không thành công, tôi biết $violationList->getFieldNames()
trả về trường không hợp lệ nhưng không trả về quy tắc không thành công.
Và cuối cùng, các quy tắc mà Drupal 9 cung cấp là gì, chúng có phải là những quy tắc được cung cấp cùng với các thành phần Trình xác thực Symfony như đã nêu trong tài liệu của Drupal HOẶC có một danh sách xác định.