Alt klasörler ve ad alanı sınıfları nasıl yapılır


11

Drupal 7'de başka bir modülün içinde bir modül olabilir. Bu Drupal 8'de hala geçerli mi ve alt modül içindeki sınıfları nasıl adlandırırım?

Drupal 7'de yapabileceğim bir diğer şey de modüllerimi gruplandırmak için modüller klasörü içinde alt klasörler oluşturmak.

Misal:

siteler
--- / tüm
--- / --- / modüller
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

Drupal 8'de bu hala mümkün mü? Evetse, otomatik yükleyicinin onu doğru klasör yapısına çözümleyebilmesi için sınıflarımı nasıl adlandıracağım?

örneğin: Drupal \ Collection_Alpha \ module_a \ myClass1?


2
Ad alanı çözünürlüğünün "/ path / to / module / src" olarak kaydedileceğinden eminim, bu nedenle 'alt' modüller için farklı bir şey yapmanız gerekmez. yani ana modül Drupal\my_module'my_module / src', alt modül Drupal\my_submodule'my_module / modules / my_submodule / src', vb. olacaktır
Clive

Teşekkürler Clive, bu mantıklı! Alt klasörler ne olacak? Bunun hala desteklenip desteklenmediği ve bir sınıfın otomatik yüklenmesi ile nasıl görüneceği hakkında bir fikriniz var mı?
dustinmoris

Yanıtlar:


7

@Clive doğru.

Ad alanı daima Drupal\{module_name} . Bu modülün yaşadığı yer ilgisizdir (Drupal'ın bulabileceği bir yerde olduğu sürece). Bu isim alanı her zaman işaret eder $path_to_module/src.

Başka hiçbir şekilde çalışmaz. Farklı sitelerin farklı yapılarda ve farklı yerlerde modülleri vardır, ancak nerede olursa olsun aynı kodun çalışması gerekir.


Teşekkürler Clive ve Berdir! Sanırım bir takip sorum daha var: Modüller klasörünü de gösteren ek bir ad alanı kaydetmek mümkün mü? örneğin: DrupalModules \ {module_name}, $ path_to_module / src? Bir gün D8'e taşınırken bugün sınıflarımızı nasıl çok az sürtünecek şekilde tasarlayacağımı daha iyi anlamak istiyorum.
dustinmoris

1
Sınıflar Drupal'a özgü ise (yani bağımsız bir kütüphane yazmıyorsanız), \Drupaltutarlılık uğruna onları saklamak muhtemelen daha iyi olacaktır . Ama yine de ilginç bir soru, ayrı bir soru olarak sormanızı öneririm. Aslında yapmazsanız, muhtemelen yapacağım :)
Clive

1
Muhtemelen, evet, bkz. System_register () ve drupal_classloader_register (). Bu yardımcı "Drupal \" sabit kodunu kullanır, ancak class_loader hizmetini doğrudan alabilirsiniz. Ancak @Clive'in dediği gibi, bunu tavsiye etmem, harici bir kütüphane eklemediğiniz sürece, bunu yapmak için gerçekten bir neden yoktur.
Berdir

Coolio, bu mantıklı! Teşekkürler beyler! @Clive: Dediğin gibi drupal.stackexchange.com/questions/142309/…
dustinmoris

Yapıyı görmek için mongodb modülünü zaten kontrol edebilirsiniz.

6

Ad alanları PSR-4 otomatik yüklemeye dayanır, http://www.php-fig.org/psr/psr-4 spesifikasyonunu kontrol edin .

Alt modüller istiyorsanız, Bir sonraki klasör yapısını kullanabilirsiniz. d8:

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

"My_module" için ad alanı:

Drupal\my_module\Controller\A

"My_sub_module" için ad alanı:

Drupal\my_sub_module\Controller\B

Daha fazla bilgi için Drupal 8'deki PSR-4 ad alanları ve otomatik yükleme konusuna bakın .


Teşekkürler dmouse. Başlangıçta sorumu Drupal.org'daki bağlantılı kaynak üzerine gönderdim ve şimdi bu konuyu da işaret etmek için kendi sorumu düzenledim;)
dustinmoris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.