Sub folder dan cara kelas namespace

11

Di Drupal 7 saya dapat memiliki modul di dalam modul lain. Apakah ini masih terjadi di Drupal 8 dan bagaimana saya akan namespace kelas di dalam sub modul?

Hal lain yang dapat saya lakukan di Drupal 7 adalah membuat sub folder di dalam folder modules untuk mengelompokkan modul-modul saya.

Contoh:

situs
--- / semua
--- / --- / modul
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

Apakah ini masih mungkin di Drupal 8? Jika ya, bagaimana saya harus namespace kelas saya sehingga autoloader dapat menyelesaikannya ke struktur folder yang benar?

misal: Drupal \ Collection_Alpha \ module_a \ myClass1?

dustinmoris
sumber
2
Saya cukup yakin resolusi namespace akan terdaftar sebagai "/ path / to / module / src", jadi Anda tidak perlu melakukan sesuatu yang berbeda untuk modul 'sub'. yaitu modul utama akan Drupal\my_moduledi 'my_module / src', sub modul akan Drupal\my_submoduledi 'my_module / modules / my_submodule / src', dan seterusnya
Clive
Terima kasih Clive, itu masuk akal! Bagaimana dengan sub folder? Adakah ide jika ini masih didukung dan bagaimana kelihatannya dengan autoloading sebuah kelas?
dustinmoris

Jawaban:

7

@Clive benar.

Namespace selalu Drupal\{module_name} . Di mana modul itu hidup tidak relevan (selama itu di suatu tempat di mana Drupal dapat menemukannya). Namespace itu selalu menunjuk $path_to_module/src.

Itu tidak mungkin bekerja dengan cara lain. Situs yang berbeda memiliki modul dalam struktur dan tempat yang berbeda, tetapi kode yang sama harus berfungsi di mana pun.

Berdir
sumber
Terima kasih Clive dan Berdir! Saya kira saya punya satu pertanyaan lanjutan: Apakah mungkin untuk mendaftarkan namespace tambahan yang menunjuk ke folder modul juga? misal: DrupalModules \ {module_name} untuk menunjuk ke $ path_to_module / src? Saya meminta untuk lebih memahami bagaimana merancang kelas kami hari ini agar memiliki sedikit gesekan ketika pindah ke D8 suatu hari.
dustinmoris
1
Jika kelas-kelasnya khusus untuk Drupal (artinya Anda tidak menulis perpustakaan yang berdiri sendiri), akan lebih baik untuk mempertahankannya agar tetap \Drupalkonsisten. Namun pertanyaan yang menarik, saya mendorong Anda untuk mengajukannya sebagai pertanyaan terpisah. Bahkan jika tidak, saya mungkin akan :)
Clive
1
Anda mungkin bisa, ya, lihat system_register () dan drupal_classloader_register (). Fungsi pembantu itu hardcode "Drupal \", tetapi Anda bisa mendapatkan layanan class_loader secara langsung. Tapi seperti yang dikatakan @Clive, saya tidak akan merekomendasikan melakukannya, sebenarnya tidak ada alasan untuk melakukannya, kecuali Anda termasuk perpustakaan eksternal.
Berdir
Coolio, itu masuk akal! Terima kasih teman-teman! @Clive: Seperti yang Anda sarankan, saya membuat drupal.stackexchange.com/questions/142309/…
dustinmoris
Anda dapat memeriksa modul mongodb untuk melihat strukturnya.
6

Namespaces didasarkan pada PSR-4 autoload, periksa spesifikasi http://www.php-fig.org/psr/psr-4 .

Jika Anda ingin sub-modul, Anda dapat menggunakan struktur folder berikutnya. d8:

/modules
   my_module/
     src/
      Controller/
        A.php
     modules/
       my_sub_module/
         src/
          Controller/
            B.php

Namespace untuk "my_module":

Drupal\my_module\Controller\A

Namespace untuk "my_sub_module":

Drupal\my_sub_module\Controller\B

Lihat ruang nama PSR-4 dan autoloading di Drupal 8 untuk informasi lebih lanjut.

dmouse
sumber
Terima kasih, dmouse. Awalnya saya memposting pertanyaan saya pada sumber daya tertaut di Drupal.org dan sekarang saya telah mengedit pertanyaan saya sendiri untuk menunjukkan utas ini juga;)
dustinmoris