จริงๆแล้วมันง่ายมาก ยกเว้นการลบการอ้างอิงถึงบัญญัติทั้งหมดออกจากรหัสสำเร็จรูป ฉันแค่ต้องการแทนที่ฟังก์ชันเดียว ถึงUrl
ในคลาสเอนทิตีที่กำหนดเองของฉัน:
src/Entity/MyContentEntity.php
/**
* กำหนดคลาสเอนทิตีก้อน
* สังเกตรายการ "links = { canonical }" ที่ขาดหายไปในคำอธิบายประกอบ
*
*
* @ContentEntityType(
* id = "ก้อน",
* ...
* ลิงก์ = {
* "แบบฟอร์มเพิ่มเติม" = "/admin/content/chunk/add/{chunk_type}",
* "เพิ่มหน้า" = "/admin/content/chunk/add",
* "แก้ไขแบบฟอร์ม" = "/admin/content/chunk/{chunk}/edit",
* "แบบฟอร์มการลบ" = "/admin/content/chunk/{chunk}/delete",
* "collection" = "/admin/content/chunk"
* },
* ...
* )
*/
Class Chunk ขยาย ContentEntityBase ใช้ ChunkInterface {
/**
* สิ่งนี้จะป้องกัน WSOD เมื่อโมดูลบุคคลที่สามเรียก $entity->toUrl
*/
ฟังก์ชันสาธารณะ toUrl($rel = 'canonical', array $options = []) {
ถ้า ($ rel == 'บัญญัติ') {
ส่งคืน Url::fromUri('เส้นทาง:<nolink>')->setOptions($options);
}
อื่น {
ส่งคืนพาเรนต์::toUrl($rel, $options);
}
}
}
สิ่งอื่นๆ ที่นี่จำเป็นต่อเมื่อเอนทิตีอิงตามรหัสสำเร็จรูปที่สร้างขึ้นโดยอัตโนมัติจาก drush สร้าง
หรือที่คล้ายกัน:
src/Form/MyContentEntityForm.php
/**
* การเปลี่ยนแปลงต่อไปนี้จำเป็นต่อเมื่อคุณใช้รหัสสำเร็จรูปจาก "drush create" หรือที่คล้ายกัน
*/
คลาส ChunkForm ขยาย ContentEntityForm {
บันทึกฟังก์ชั่นสาธารณะ (อาร์เรย์ $form, FormStateInterface $form_state) {
...
// เปลี่ยนบรรทัดต่อไปนี้
//$form_state->setRedirect('entity.chunk.canonical', ['chunk' => $entity->id()]);
// ไปที่สิ่งที่คุณเลือก
$form_state->setRedirect('entity.chunk.edit-form', ['chunk' => $entity->id()]);
}
}
my_module.links.task.yml
:
# หากมีอยู่ ให้ลบโค้ดสำเร็จรูปต่อไปนี้ออกจาก "drush create" หรือที่คล้ายกัน
entity.chunk.view:
หัวเรื่อง : ดู
route_name: entity.chunk.canonical
base_route: entity.chunk.canonical