Score:0

ฉันจะตั้งกฎการตรวจสอบในฟิลด์เอนทิตีของฉันและรับข้อผิดพลาดได้อย่างไร หากข้อมูลไม่ถูกต้อง

ธง ye

ฉันมีเอนทิตีนี้ซึ่งมีฟิลด์ลิงก์

ลิงค์นี้จำเป็น ต้องมากกว่า 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]) ดูเหมือนจะไม่ทำงาน เนื่องจากฉันไม่ได้รับข้อผิดพลาดใด ๆ ขณะตรวจสอบข้อมูลของฉัน

ดังนั้นฉันจึงมีคำถามเกี่ยวกับรหัสนี้:

  1. เราจะตั้งกฎการตรวจสอบสำหรับเอนทิตีได้อย่างไร ฉันเห็นสองฟังก์ชัน เพิ่มข้อจำกัด และ setPropertyConstraints. ใช้ตัวไหนดีคะ หรือมีวิธีอื่น ?

  2. หลังจากตรวจสอบข้อมูลแล้ว และถ้า $violationList->count() เป็นบวก เราจะได้กฎที่ล้มเหลวได้อย่างไร ฉันรู้ $violationList->getFieldNames() ส่งคืนฟิลด์ที่ไม่ถูกต้อง แต่ไม่ใช่กฎที่ล้มเหลว

  3. และข้อสุดท้าย อะไรคือกฎที่ Drupal 9 มีให้ กฎเหล่านั้นมาพร้อมกับส่วนประกอบ Symfony Validator ตามที่ระบุไว้ในเอกสารประกอบของ Drupal หรือมีรายการที่กำหนดไว้

apaderno avatar
us flag
The *string* entity field has only the *max_length* setting, and that works, as it's used from [`Node::baseFieldDefinitions()`](https://api.drupal.org/api/drupal/core%21modules%21node%21src%21Entity%21Node.php/function/Node%3A%3AbaseFieldDefinitions/9.3.x). There is no need to add a constraint for that, which is already added from [`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).
Score:2
ธง ph

ฉันใช้ addConstraint ในเอนทิตีที่กำหนดเองและไม่มีปัญหา ฉันเห็นว่าคำจำกัดความฟิลด์ของคุณมีไว้สำหรับ "ชื่อ" แต่ข้อมูลของคุณระบุว่า "ลิงก์" อาจเป็นเพราะเหตุผลนั้น

นี่คือตัวอย่างสำหรับการรับข้อผิดพลาด:

    $violations = $entity->validate();
    $ข้อผิดพลาด = [];
    foreach ($ การละเมิดเป็น $ การละเมิด) {
      $property = $violation->getPropertyPath();
      $field = ระเบิด('.', $property)[0];
      $label = $entity->get($field)->getFieldDefinition()->getLabel();
      $errors[] = $ฉลาก ':' . $violation->getMessage();
    }

มีรายการข้อจำกัดหลักอยู่ที่นี่:

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

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา