Dalam pengembangan modul Drupal 7, saya dapat menyertakan file kelas inc, api, atau php khusus menggunakan file [] = direktif dalam file module.info atau fungsi drupal_load_included ().
Dengan D8 menggunakan PSR, apa cara yang tepat untuk mengemas "objek PHP ole biasa" dan merujuknya DefaultController.php
? Pikirkan sesuatu seperti: $a = new POPO();
.
Apakah hanya memberi file PHP yang berisi kelas yang namespace
cukup? Bagaimana pengontrol (atau modul pada umumnya) tahu untuk referensi atau memindai kelas itu?
Jawaban:
Anda tidak menggunakannya
file[] = ...
lagi. Sebagai gantinya, kelas diisi secara otomatis. Sebagai contoh, saya memiliki modul dengan struktur file berikut:HybridFormatter.php
mendefinisikan kelas yang disebut HybridFormatter.Dalam file .module saya, jika saya mulai mengetik di IDE saya (NetBeans dalam kasus ini)
HybridFormatter
itu autocompletes ke\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::
karena itu autoloaded. Karena saya tidak ingin seluruh jalur mengotori modul saya, di bagian atas saya telah meletakkan garis,bersama dengan
use
arahan untuk kelas lain saya termasuk untuk digunakan dengan modul saya.Namespace didefinisikan dalam HybridFormatter.php seperti:
sumber
include_once
ataurequire_once
atau apa pun. Hybridformatter.php tidak mendefinisikan namespace. Saya akan memasukkan dalam jawabannya.Saya ingin menambahkan itu untuk menyertakan kelas khusus yang tidak sesuai dengan D8 "plugin, controller, form, etc." secara default, Anda masih dapat melakukannya seperti yang tercantum dalam tinjauan umum PSR-4 di sini
Untuk kasus penggunaan saya, saya menjatuhkan "CustomClass.php" di / modules / custom / my_module / src / Di awal file saya menyertakan deklarasi namespace
dan dalam file saya ingin menggunakannya dalam (dalam hal ini my_theme.theme) saya menambahkan
sumber