ลูกค้ามีอนุกรมวิธานแบบลำดับชั้นที่เรียบง่ายและสอดคล้องกัน
เมืองในระดับสูงสุดและโรงเรียนในระดับที่สอง
.
âââ เมือง1
â âââ โรงเรียน1
â âââ โรงเรียน2
â âââ โรงเรียน5
âââ เมือง2
âââ โรงเรียน3
âââ โรงเรียน4
กลุ่มเอนทิตีของบัญชีผู้ใช้มีฟิลด์การอ้างอิงเอนทิตีสำหรับเงื่อนไขการจัดหมวดหมู่ของโรงเรียน
ฉันกำลังพยายามบังคับใช้ข้อจำกัดเพื่อป้องกันการสร้างหรือบันทึกบัญชีผู้ใช้ หากคำศัพท์ที่เลือกอยู่ในระดับบนสุดของลำดับชั้น (และด้วยเหตุนี้เมือง ไม่ใช่โรงเรียน)
นี่คือตัวอย่างโค้ดบางส่วน ข้ามการพึ่งพาการฉีดของ $this->entityTypeManager
เพื่อความกระชับ
TermParentConstraint.php
:
<?php
เนมสเปซ Drupal\entity_validation_examples\Plugin\Validation\Constraint;
ใช้ Symfony\Component\Validator\Constraint;
/**
* ป้องกันการสร้างบัญชีหากคำอนุกรมวิธานของโรงเรียนไม่มีพาเรนต์
*
* @ข้อ จำกัด (
* id = "TermParent",
* label = @Translation("ป้องกันการสร้างบัญชีหากคำไม่มีพาเรนต์", บริบท = "การตรวจสอบความถูกต้อง"),
* ประเภท = "นิติบุคคล"
* )
*/
คลาส TermParentConstraint ขยายข้อ จำกัด {
/**
* ข้อความแสดงขึ้นเมื่อพยายามสร้างบัญชีหากโรงเรียนไม่มีเมืองหลัก
*
* @var สตริง
* ข้อความของโรงเรียน
*/
public $schoolMessage = 'คุณต้องเลือกทั้งเมืองและโรงเรียน';
}
TermParentConstraintValidator.php
:
<?php
เนมสเปซ Drupal\entity_validation_examples\Plugin\Validation\Constraint;
ใช้ Drupal\user\Entity\User;
ใช้ Symfony\Component\Validator\Constraint;
ใช้ Symfony\Component\Validator\ConstraintValidator
/**
* ตรวจสอบข้อ จำกัด TermParent
*/
คลาส TermParentConstraintValidator ขยาย ConstraintValidator {
/**
* {@inheritdoc}
*/
ตรวจสอบฟังก์ชั่นสาธารณะ ($ เอนทิตี, ข้อ จำกัด $ ข้อ จำกัด ) {
ถ้า (!isset($entity)) {
กลับ;
}
ถ้า ($entity->getEntityTypeId() == 'ผู้ใช้') {
$school = $entity->get('field_select_a_school')->getValue();
// เงื่อนไขอนุกรมวิธานโรงเรียนกำพร้าต้องเป็นเมืองไม่ใช่โรงเรียน
$parent = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->loadParents($school[0]['target_id']);
ถ้า (ว่าง ($ parent)) {
$this->context->addViolation($constraint->schoolMessage);
}
}
}
}
พฤติกรรมที่คาดหวัง: เมื่อฉันสร้างบัญชีผู้ใช้ใหม่และเลือก เมือง1
เป็นค่าของ โรงเรียน
การสร้างบัญชีจะล้มเหลวและควรแสดงข้อความแสดงข้อผิดพลาด
พฤติกรรมจริง: เมื่อฉันสร้างบัญชีผู้ใช้ใหม่และเลือก เมือง1
เป็นค่าของ โรงเรียน
การสร้างบัญชีสำเร็จและไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
บันทึกของ Drupal Watchdog มีข้อผิดพลาดบางอย่าง แต่ฉันไม่แน่ใจว่าเกี่ยวข้องกับ:
ดรัช
--------- -------------- ------ ---------- ----------- --------------------------------------------- --------------------------------------------- --------------------------------------------- -----------------------------
ID วันที่ ประเภท ข้อความแสดงความรุนแรง
--------- -------------- ------ ---------- ----------- --------------------------------------------- --------------------------------------------- --------------------------------------------- -----------------------------
5298867 18 ต.ค. 22:57 คำเตือนคำเตือน php: ประเภทออฟเซ็ตที่ผิดกฎหมายใน isset หรือว่างเปล่าใน Drupal\Core\Entity\EntityStorageBase->load() (บรรทัดที่ 246 ของ /app/docroot/core/lib/Drupal/Core/Entity/ EntityStorageBase.php) #0 /app/docroot/
5298866 18 ต.ค. 22:57 ประกาศเกี่ยวกับ php ประกาศ: การแปลงอาร์เรย์เป็นสตริงใน Drupal\Core\Entity\EntityStorageBase->buildCacheId() (บรรทัดที่ 126 ของ /app/docroot/core/lib/Drupal/Core/Entity/EntityStorageBase.php ) #0 /app/docroot/core
5298865 18/Oct 22:57 php Warning คำเตือน: array_flip(): สามารถพลิกค่า STRING และ INTEGER เท่านั้น! ใน Drupal\Core\Entity\EntityStorageBase->loadMultiple() (บรรทัดที่ 261 ของ /app/docroot/core/lib/Drupal/Core/Entity/EntityStorageB
5298864 18 ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298863 18/ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298862 18/ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298861 18/ต.ค. 22:57 น. ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด ไม่อนุญาตให้แปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298860 18 ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298859 18 ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
5298858 18 ต.ค. 22:57 ประกาศเกี่ยวกับ php: iconv(): ชุดอักขระผิด การแปลงจาก `HTML-ENTITIES' เป็น `UTF-8' ไม่ได้รับอนุญาตใน twig_convert_encoding() (บรรทัดที่ 1009 ของ /app/vendor/twig/twig /src/Extension/CoreExtension.php) #0
--------- -------------- ------ ---------- ----------- --------------------------------------------- --------------------------------------------- --------------------------------------------- -----------------------------
ฉันได้เห็น ไอคอน ()
เกิดข้อผิดพลาดตั้งแต่อัปเกรดโปรเจกต์นี้จาก Drupal 8 เป็น Drupal 9 ดังนั้นฉันจึงไม่คิดว่ามันเกี่ยวข้องกัน ข้อความแสดงข้อผิดพลาด 3 อันดับแรกที่นี่อาจเกี่ยวข้องกับการตรวจสอบข้อจำกัด แต่ก็เป็นข้อผิดพลาดทั่วไปในโครงการนี้เช่นกัน (และการดีบักข้อความเหล่านี้มีความสำคัญต่ำกว่าฟังก์ชันการทำงานที่จำเป็นซึ่งจะครบกำหนดในเร็วๆ นี้)
ความคิดใด ๆ ? อย่างน้อยฉันก็มาถูกทางแล้ว?