ฉันจะรวมไฟล์คลาสที่กำหนดเองในโมดูลได้อย่างไร


10

ในการพัฒนาโมดูล Drupal 7 ฉันสามารถรวมไฟล์คลาส inc, api หรือ php ที่กำหนดเองโดยใช้ไฟล์ [] = directive ในไฟล์ module.info หรือฟังก์ชัน drupal_load_included ()

ด้วย D8 โดยใช้ PSR เป็นวิธีที่เหมาะสมในการทำแพคเกจ "วัตถุ PHP ธรรมดา ole" และอ้างอิงในDefaultController.phpอะไร $a = new POPO();คิดว่าสิ่งที่ชอบ:

เป็นเพียงการให้ไฟล์ PHP ที่มีชั้นเรียนnamespaceเพียงพอหรือไม่ คอนโทรลเลอร์ (หรือโมดูลโดยทั่วไป) ทราบได้อย่างไรว่ามีการอ้างอิงหรือสแกนหาคลาสนั้น


ลิงค์นี้การสร้างโมดูล Drupal 8.xอาจเป็นประโยชน์
Krishna Mohan

ใช่ฉันได้อ่านผ่านdrupal.org/node/2087879แต่เมื่อไม่เห็นไฟล์ [] = คำสั่งมันน่าเสียดายที่ไม่ได้ตอบคำถามเฉพาะเรื่องการรวมไฟล์นี้
ริค

คำตอบ:


11

คุณจะไม่ใช้file[] = ...อีกต่อไป คลาสจะถูกโหลดอัตโนมัติ ตัวอย่างเช่นฉันมีโมดูลที่มีโครงสร้างไฟล์ต่อไปนี้:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • เสียบเข้าไป/
        • สนาม /
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php กำหนดคลาสที่เรียกว่า HybridFormatter

ในไฟล์. โมดูลของฉันถ้าฉันเริ่มพิมพ์ใน IDE ของฉัน (NetBeans ในกรณีนี้) HybridFormatterมันจะเติมข้อความอัตโนมัติ\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::เพราะมันถูกโหลดอัตโนมัติ เนื่องจากฉันไม่ต้องการเส้นทางทั้งหมดที่ทิ้งขยะโมดูลของฉันที่ด้านบนฉันวางบรรทัด

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

พร้อมกับuseคำสั่งสำหรับชั้นเรียนอื่น ๆ ที่ฉันรวมถึงสำหรับใช้กับโมดูลของฉัน

namespace ถูกกำหนดใน HybridFormatter.php ดังนี้:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

ดังนั้นเพื่อให้แน่ใจว่าฉันเข้าใจอย่างสมบูรณ์ HybridFormatter.php จะถูกโหลดอัตโนมัติ ... โดยอัตโนมัติหรือไม่ ไม่จำเป็นต้องมี include_once ()? HybridFormatter.php มีการกำหนด namespace หรือไม่?
ริค

มีความจำเป็นไม่เป็นinclude_onceหรือrequire_onceหรืออะไร Hybridformatter.php กำหนดเนมสเปซ ฉันจะรวมไว้ในคำตอบ

@beth คุณช่วยฉันได้ไหม drupal.stackexchange.com/questions/233565/…
RobinSon

9

ฉันต้องการเพิ่มที่รวมคลาสที่กำหนดเองที่ไม่พอดีกับปลั๊กอิน "D8, คอนโทรลเลอร์, แบบฟอร์ม ฯลฯ " ของ D8 ค่าเริ่มต้นคุณยังสามารถทำได้ตามภาพรวม PSR-4 ที่ระบุ

สำหรับกรณีการใช้งานของฉันฉันปล่อย "CustomClass.php" ใน / modules / custom / my_module / src / ที่จุดเริ่มต้นของไฟล์ฉันรวมประกาศ namespace

namespace Drupal\my_module;

และในไฟล์ที่ฉันต้องการใช้ใน (ในกรณีนี้คือ my_theme.theme) ฉันเพิ่ม

use Drupal\my_module\CustomClass;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.