Score:2

ไม่มีบันเดิลสำหรับโหนดประเภทเอนทิตีหลังจากอัปเกรด

ธง ph

ฉันเพิ่งอัปเกรดแซนด์บ็อกซ์ในเครื่องเป็น Drupal core 9.2.4 ขณะทดสอบ ฉันพบข้อผิดพลาดขณะพยายามเพิ่มเนื้อหาบทความใหม่จาก /node/add/article

บันทึกแสดงข้อความต่อไปนี้

Drupal\Core\Entity\EntityStorageException: ไม่มีบันเดิลสำหรับโหนดประเภทเอนทิตีใน Drupal\Core\Entity\ContentEntityStorageBase->doCreate() (บรรทัดที่ 97 ของ /var/www/drupal9sandbox/docroot/core/lib/Drupal/Core/Entity/ ContentEntityStorageBase.php).

การเปลี่ยนแปลงเดียวที่ฉันทำก่อนหน้านี้คือในไฟล์ article.routing.yml ฉันต้องใช้ _entity_form: 'node.default' แทน Drupal\node\Controller\NodeController::เพิ่ม() ตามที่เลิกใช้แล้วใน Drupal 9 ตามที่รายงานใน NodeController::add() วิธีการเลิกใช้แล้ว.

นี่คือเนื้อหาที่สมบูรณ์ของ Articles.routing.yml ไฟล์.

นอกจากการเปลี่ยนแปลงเล็กน้อยแล้ว _entity_form: 'node.default'ฉันไม่ได้แตะต้องสิ่งอื่นใด

custom_articles.add_content:
  เส้นทาง: '/โหนด/เพิ่ม/บทความ'
  ค่าเริ่มต้น:
    _entity_form: 'node.default'
    _title_callback: '\Drupal\node\Controller\NodeController::addPageTitle'
    node_type: 'บทความ'
  ความต้องการ:
    _node_add_access: 'โหนด:บทความ'
  ตัวเลือก:
    _node_operation_route: จริง
    พารามิเตอร์:
      node_type:
        with_config_overrides: จริง

ฉันไม่แน่ใจว่าจะกำหนดประเภทบันเดิลไว้ที่ใด แต่เนื้อหาประเภทนี้ทำงานได้ดีบน Drupal 8.9.16

apaderno avatar
us flag
ตามหมายเหตุด้านข้าง หาก *Article* เป็นประเภทเนื้อหาที่กำหนดไว้บนไซต์ คุณไม่จำเป็นต้องกำหนดเส้นทางสำหรับเนื้อหานั้น: โมดูลโหนดจะดูแลเรื่องนั้น อันที่จริง มันมีเส้นทางสำหรับ */node/add/{node_type}* ซึ่งใช้ได้กับเนื้อหาทุกประเภทที่ไซต์มี
cn flag
มีเหตุผลที่คุณประกาศเส้นทางที่มีอยู่ใหม่หรือไม่ จะเกิดอะไรขึ้นหากคุณลบเส้นทางที่กำหนดเองและล้างแคช
apaderno avatar
us flag
เพื่อยืนยันความคิดเห็น @Clive โปรไฟล์การติดตั้ง *มาตรฐาน* ที่ใช้จาก Drupal 9 (แต่รวมถึง Drupal เวอร์ชันก่อนหน้าด้วย) ได้เพิ่มประเภทเนื้อหา *Article* แล้ว หากติดตั้ง Drupal โดยใช้โปรไฟล์การติดตั้งอื่น *Article* จะไม่สามารถเป็นประเภทเนื้อหาที่กำหนดไว้ล่วงหน้าได้ แต่ก็ยังไม่จำเป็นต้องเพิ่มเส้นทางที่กำหนดเองเมื่อโมดูลโหนดจะดูแล
ph flag
@Clive เส้นทางมีมาก่อนแล้ว การเปลี่ยนแปลงเดียวที่ฉันทำอยู่ภายใต้ค่าเริ่มต้น แทนที่จะเป็น `_entity_form: 'node.default'` มันใช้ `controller:'Drupal\node\Controller\NodeController::add()'` อย่างไรก็ตาม สิ่งนั้นเลิกใช้แล้วใน Drupal 9
cn flag
เว้นแต่คุณจะมีเหตุผลที่ดีจริงๆ ในการสร้างเส้นทางแบบกำหนดเองสำหรับเส้นทางที่มีอยู่แล้วและถูกควบคุมโดยระบบ คุณควรลบโค้ดนั้นออก มิฉะนั้น คุณจะต้องบำรุงรักษาอย่างต่อเนื่องด้วยการอัปเดตหลัก โดยไม่เกิดประโยชน์ใดๆ สิ่งที่คุณสามารถทำได้ในเส้นทางที่ประกาศใหม่ คุณสามารถทำได้ "ถูกต้อง" ด้วยวิธีอื่น
ph flag
@Clive ฉันเพิ่งลบออกและใช้งานได้! ตาม [บันทึกการเปลี่ยนแปลง](https://www.drupal.org/node/3084856) ตัวควบคุม Add() ถูกลบออกจาก Drupal 9 และตอนนี้จัดการโดย `_entity_form มันไม่ได้ระบุว่าจะใช้อะไรแทน ดังนั้นฉันเดาว่ามันหมายถึงให้เอาตัวควบคุม Add() ออกหากคุณใช้งานอยู่
cn flag
ในกรณีที่นี่ไม่ใช่สิ่งที่คุณหมายถึง คุณควรลบ IMO การประกาศเส้นทางทั้งหมด ไม่จำเป็นและอาจทำให้คุณปวดหัวมากขึ้นในอนาคต ใครก็ตามที่เขียนว่าอาจเข้าใจ Symfony API เป็นอย่างดี แต่อาจเข้าใจ Drupal API น้อยกว่า
ph flag
สิ่งนี้ถูกสร้างขึ้นตั้งแต่เนิ่นๆ เมื่อเราย้ายไปที่ Drupal ดังนั้นฉันเดาว่าพวกเขาเขียนตามเทมเพลตสำเร็จรูปที่มีให้ก่อนหน้านี้ ประเภทเนื้อหาที่ประสบความสำเร็จทั้งหมดที่สร้างขึ้นไม่มีทั้งหมดนี้ ดังนั้นวิธีแก้ไขคือลบบล็อกเพิ่มนั้นในไฟล์ routing.yml ฉันจะยอมรับคำตอบของคุณได้อย่างไร?

โพสต์คำตอบ

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