Bagaimana cara saya memasukkan file kelas khusus dalam modul?

10

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 namespacecukup? Bagaimana pengontrol (atau modul pada umumnya) tahu untuk referensi atau memindai kelas itu?

Rick
sumber
Tautan ini Membuat modul Drupal 8.x mungkin membantu
Krishna Mohan
Ya, saya sudah membaca drupal.org/node/2087879 tetapi setelah tidak melihat file [] = arahan, sayangnya tidak menjawab pertanyaan khusus tentang penyertaan file ini.
Rick

Jawaban:

11

Anda tidak menggunakannya file[] = ...lagi. Sebagai gantinya, kelas diisi secara otomatis. Sebagai contoh, saya memiliki modul dengan struktur file berikut:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • Plugin /
        • Bidang/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php mendefinisikan kelas yang disebut HybridFormatter.

Dalam file .module saya, jika saya mulai mengetik di IDE saya (NetBeans dalam kasus ini) HybridFormatteritu 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,

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

bersama dengan usearahan untuk kelas lain saya termasuk untuk digunakan dengan modul saya.

Namespace didefinisikan dalam HybridFormatter.php seperti:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }
beth
sumber
Jadi untuk memastikan saya sepenuhnya mengerti, HybridFormatter.php akan di-autoload ... secara otomatis? Tidak perlu untuk include_once ()? Apakah HybridFormatter.php memiliki namespace yang ditentukan?
Rick
Tidak perlu include_onceatau require_onceatau apa pun. Hybridformatter.php tidak mendefinisikan namespace. Saya akan memasukkan dalam jawabannya.
beth
@beth Bisakah Anda membantu saya? drupal.stackexchange.com/questions/233565/…
RobinSon
9

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

namespace Drupal\my_module;

dan dalam file saya ingin menggunakannya dalam (dalam hal ini my_theme.theme) saya menambahkan

use Drupal\my_module\CustomClass;
ben.hamelin
sumber