วิธีสร้างเอนทิตีที่กำหนดเองใน Drupal 8 [ปิด]


10

ฉันมีโครงการส่วนบุคคลขนาดใหญ่ที่สร้างขึ้นบน Drupal 7 ซึ่งมีเอนทิตีที่กำหนดเองมากมาย ฉันต้องการเริ่มอัปเกรดโครงการเป็น Drupal 8 แต่หลัก Drupal 8 ที่เขียนขึ้นใหม่อย่างสมบูรณ์นั้นใหญ่เกินไปสำหรับฉันที่จะไปถึงที่อื่นโดยไม่ต้องใช้เอกสารประกอบใด ๆ (+ Symfony เป็นที่รู้จักโดยสิ้นเชิงสำหรับฉันแล้ว .

ฉันพยายามสร้างเอนทิตีที่กำหนดเองโดยดูที่โค้ดคอร์บางส่วน แต่ไม่ประสบความสำเร็จ

คุณช่วยชี้ให้ฉันดูบทความเกี่ยวกับเอนทิตีแบบกำหนดเองใน Drupal 8 (ฉันไม่สามารถค้นหาทีละรายการ) หรือให้คำแนะนำพื้นฐานทีละขั้นตอนได้หรือไม่

ขอบคุณ

entities  8 

1
คุณสามารถแก้ไขคำถามเพื่อเพิ่มสักนิดเกี่ยวกับว่าคุณได้รับมานานแค่ไหนและตรงไหนที่คุณกำลังดิ้นรน? การดูรหัสเฉพาะที่คุณมีปัญหาจะเหมาะที่สุด การสร้างเอนทิตีที่กำหนดเองไม่ใช่งานเล็ก ๆ - อาจเป็นคำถามที่กว้างเกินไปทั้งในรูปแบบของไซต์และเพื่อโอกาสในการได้รับคำตอบที่ดี โปรดจำไว้ว่าการขอลิงค์ / บทช่วยสอนนั้นไม่ได้อยู่ในหัวข้อนี้โดยเฉพาะด้วยเหตุผลดังกล่าว ดีกว่าที่จะทำลายมันทีละชิ้นและถามคำถามเกี่ยวกับชิ้นเล็ก ๆ เหล่านั้น ขอบคุณ
Clive

นอกจากนี้หากคุณไม่รู้จัก Symfony ใด ๆ คุณอาจจะพบว่าเป็นการยากที่จะใช้ความรู้ D7 ของคุณกับ D8 สิ่งต่าง ๆ มีการเปลี่ยนแปลงค่อนข้างมาก (เช่นฉันแน่ใจว่าคุณรู้แล้ว) ฉันขอแนะนำอย่างยิ่งให้อ่านหนังสือ Symfonyให้มากที่สุดเท่าที่จะทำได้ก่อนออกเดินทาง มีการเรียงลำดับของดินที่จะทำให้การเปลี่ยนแปลงที่มากนุ่มนวลเชื่อใจฉัน นอกจากนี้ฉันพบว่าหมวดหมู่และข้อความในโมดูลผู้ติดต่อหลักเป็นจุดเริ่มต้นที่ดีมากสำหรับการเรียนรู้
Clive

@Clive นอกเหนือจาก API การตรวจสอบความถูกต้องยังมี Entity API ใน Drupal 8 แทบจะไม่เกี่ยวข้องกับ Symfony เลยดังนั้นฉันคิดว่ามันไม่เกี่ยวข้องกัน มิฉะนั้นเห็นด้วยกับคำถามที่กว้างเกินไป แต่ฉันพยายามที่จะให้ภาพรวมคำถามที่เฉพาะเจาะจงมากขึ้นสามารถตอบได้ในรายละเอียดเพิ่มเติม และจะช่วยให้มีจุดเริ่มต้นเนื่องจากไม่ชัดเจนเกินไปหากคุณไม่รู้จัก D8
Berdir

@Berdir ฉันหมายถึง D7 -> D8 โดยทั่วไปไม่ใช่สำหรับองค์กรโดยเฉพาะ ตัวอย่างเช่นความรู้เกี่ยวกับการกำหนดเส้นทางและบริการของ Symfony ทำให้การเข้าใจรหัสหลักง่ายขึ้นมากโดยทั่วไป เขียนบทความได้อย่างยอดเยี่ยมโดยไม่มีเหตุผลที่จะคิดเกี่ยวกับการปิดคำถามนี้ในขณะนี้ IMO มันเป็นทรัพยากรที่มีค่า (แม้ว่าจะเป็นเรื่องเล็กน้อยด้านกว้าง)
Clive

คำตอบ:


13

ผมทำงานเกี่ยวกับเอกสาร Entity API ที่นี่: https://drupal.org/developing/api/entity

คำถามมีขนาดใหญ่เกินกว่าที่จะตอบในรายละเอียดและขึ้นอยู่กับว่าคุณต้องการเนื้อหาหรือเอนทิตีการกำหนดค่า สมมติว่าคุณต้องการเอนทิตีเนื้อหา (เก็บไว้ในฐานข้อมูลสามารถเป็นฟิลด์ / แก้ไขได้ / ... รายละเอียดในลิงค์ด้านบน) คุณต้องทำอะไรเช่นนี้เอกสารที่เชื่อมโยงข้างต้นจะครอบคลุมในแต่ละขั้นตอนในที่สุดรวมถึงบทช่วยสอนตอนนี้ มันครอบคลุมขั้นตอนแรกเท่านั้น

  1. จัดเตรียมคลาสเอนทิตีและเพิ่มหมายเหตุประกอบที่จำเป็นเพื่อแสดงเป็นเอนทิตี
  2. ระบุตารางที่จำเป็นคุณไม่ต้องเปลี่ยนแปลงมากนักถ้าคุณมีสคีมา 7.x ของคุณอยู่แล้ว แต่คุณต้องการเพิ่มคอลัมน์ uuid และ langcode ที่เป็นไปได้หากเอนทิตีของคุณสามารถมีภาษา / แปลได้ ดูตัวอย่างโหนดที่เชื่อมโยงในขั้นตอนถ้าคุณต้องการทำให้บางฟิลด์ฐาน (คุณสมบัติ) สามารถแปลได้หรือแก้ไขได้ตอนนี้คุณจำเป็นต้องจัดเตรียมตารางที่จำเป็นด้วยตัวคุณเอง
  3. จัดเตรียมนิยามฟิลด์ฐานในเมธอด baseFieldDefinitions () ของคุณ . โปรดทราบว่าวิธีการทำงานนี้จะเปลี่ยนไปในhttps://drupal.org/node/2047229 (จากอาร์เรย์เป็นคลาส)
  4. ใช้วิธีการบันทึก / โหลด / ลบที่จำเป็นล่วงหน้า / โพสต์หากคุณมีตรรกะที่กำหนดเองที่ต้องเกิดขึ้นเช่นก่อนบันทึกเอนทิตี (เช่นการปรับปรุงการประทับเวลาที่เปลี่ยนแปลง)
  5. ใช้คอนโทรลเลอร์การเข้าถึงหากคุณมีตรรกะการเข้าถึงที่ไม่สำคัญและแทนที่เมธอด checkAccess () และ checkCreateAccess () หรือระบุ admin_permission ในหมายเหตุประกอบของคุณหากคุณมีสิทธิ์เดียวที่อนุญาตการเข้าถึงแบบเต็ม
  6. ขอแนะนำให้ใช้แม้ว่าจะไม่จำเป็นต้องใช้เทคนิคในการจัดทำอินเทอร์เฟซสำหรับคลาสเอนทิตี้ของคุณ (เช่น NodeInterface for Node) ซึ่งรวมถึงวิธีการที่มีประโยชน์ (โดยปกติคือ get / set / isSomething ()) วิธีการ รับการเติมอัตโนมัติสำหรับวิธีการเหล่านั้น

ขึ้นอยู่กับสิ่งที่คุณต้องการจะมีขั้นตอนเพิ่มเติมเช่นการกำหนดรูปแบบที่จำเป็นอาจเป็นตัวควบคุมการแสดงผลเป็นต้น แต่สิ่งเหล่านั้นอาจเป็นคำถามแยกต่างหากหากคุณต้องการข้อมูลเพิ่มเติม

หมายเหตุ:

  • เอนทิตีของการกำหนดค่าจะคล้ายกันโดยทั่วไปยกเว้นคุณต้องใช้ตัวควบคุมการจัดเก็บข้อมูลการกำหนดค่า ( https://drupal.org/node/2119905จะทำให้สิ่งนี้ง่ายขึ้น) คุณไม่จำเป็นต้องกำหนดสกีมาของตาราง (ชัด) แต่คุณต้องระบุ ไฟล์ schema การกำหนดค่าดูเช่นสำหรับคำศัพท์อนุกรมวิธานหรือประเภทโหนด
  • เอนทิตีเนื้อหาไม่มีฟิลด์ฐานที่กำหนดเป็นคุณสมบัติสาธารณะหรือได้รับการป้องกัน แต่จะถูกจัดการโดยอัตโนมัติในคุณสมบัติค่าและฟิลด์ เข้าถึงได้ทั้งผ่าน get () / set () หรือวิธีเวทย์มนตร์ที่เกี่ยวข้อง ($ node-> title เท่ากับ $ node-> get ('title'))
  • ช่วยในเอกสารจะมีการต้อนรับอย่างมาก ฉันได้สร้างโครงร่างพื้นฐานสำหรับเนื้อหา / โครงสร้างที่ฉันต้องการดังนั้นเพียงแค่สร้างหน้าใหม่และเริ่มต้นใช้งานเช่นฉันสนใจที่จะมีบทช่วยสอนที่ง่ายขึ้นสำหรับหน่วยงานการกำหนดค่ามีหนึ่งที่นี่แล้วที่ฉัน จะย้ายไปยังเอกสารของเอนทิตีเมื่อพร้อม: https://drupal.org/node/1809494
  • Core มีการใช้งานเอนทิตีเนื้อหาค่อนข้างมากหากคุณต้องการดูตัวอย่างการทำงาน: โหนดผู้ใช้คำติชม CustomBlock ... เป็นบทความที่เชื่อมโยงในขั้นตอนที่ 1 อธิบายคุณสามารถค้นหาประเภทเอนทิตีที่จัดทำโดย โมดูลในเนมสเปซเอนทิตี
  • @fago เพิ่งนำเสนอเกี่ยวกับ Entity APIที่ DrupalCamp Vienna ในสุดสัปดาห์นี้ซึ่งครอบคลุมสิ่งที่ฉันเขียนที่นี่และอีกมากมาย

1
ตัวสร้างโค้ด drupal นั้นมีประโยชน์มาก - >> github.com/Chi-teck/drupal-code-generator
rémy

1
drupalconsole.com - ยังเป็นผู้ช่วยที่ดี (เครื่องมือในการสร้างรหัสสำเร็จรูป, โต้ตอบและดีบัก Drupal.)
milkovsky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.