ฉันมีเอนทิตีนี้ซึ่งมีฟิลด์ลิงก์
ลิงค์นี้จำเป็น ต้องมากกว่า 3 ตัวอักษรและน้อยกว่า 255
นอกจากนี้ยังต้องเป็น URL ที่ถูกต้อง
คลาส Myentity ขยาย ContentEntityBase ใช้ BaseEntityInterface {
ใช้ EntityChangedTrait;
ฟังก์ชันสแตติกสาธารณะ baseFieldDefinitions ( EntityTypeInterface $entity_type )
{
$fields = parent::baseFieldDefinitions($entity_type);
$fields['link'] = BaseFieldDefinition::create('สตริง')
->setLabel(t('Url'))
->setDescription(t('เอนทิตี url.'))
->ตั้งค่าการตั้งค่า(
[
'default_value' => '',
'min_length' => 3,
'max_length' => 255,
'text_processing' => 0,
]
)->setRequired(จริง)
->addConstraint('Length', ['min' => 3, 'max' => 255]);
}
}
แล้วที่ไหนสักแห่งในแอปพลิเคชัน ฉันต้องการบันทึกเอนทิตีนั้น
$data = ['ลิงค์': 'X'];
$entity = Myentity::create($data);
$violationList = $entity->validate();
เสียงสะท้อน $violationList->count(); // พิมพ์ 0 ! แม้ว่าความยาวจะไม่ดี!
setRequired(จริง)
รับรองว่าสนาม ลิงค์
เป็นข้อบังคับ
addConstraint('ความยาว', ['นาที' => 3, 'สูงสุด' => 255])
ดูเหมือนจะไม่ทำงาน เนื่องจากฉันไม่ได้รับข้อผิดพลาดใด ๆ ขณะตรวจสอบข้อมูลของฉัน
ดังนั้นฉันจึงมีคำถามเกี่ยวกับรหัสนี้:
เราจะตั้งกฎการตรวจสอบสำหรับเอนทิตีได้อย่างไร ฉันเห็นสองฟังก์ชัน เพิ่มข้อจำกัด
และ setPropertyConstraints
. ใช้ตัวไหนดีคะ หรือมีวิธีอื่น ?
หลังจากตรวจสอบข้อมูลแล้ว และถ้า $violationList->count()
เป็นบวก เราจะได้กฎที่ล้มเหลวได้อย่างไร ฉันรู้ $violationList->getFieldNames()
ส่งคืนฟิลด์ที่ไม่ถูกต้อง แต่ไม่ใช่กฎที่ล้มเหลว
และข้อสุดท้าย อะไรคือกฎที่ Drupal 9 มีให้ กฎเหล่านั้นมาพร้อมกับส่วนประกอบ Symfony Validator ตามที่ระบุไว้ในเอกสารประกอบของ Drupal หรือมีรายการที่กำหนดไว้