Sottocartelle e come classificare gli spazi dei nomi


11

In Drupal 7 posso avere un modulo all'interno di un altro modulo. È ancora così in Drupal 8 e come dovrei classificare le classi dello spazio dei nomi all'interno del sottomodulo?

Un'altra cosa che posso fare in Drupal 7 è creare sottocartelle all'interno della cartella dei moduli per raggruppare i miei moduli.

Esempio:

siti
--- / tutti
--- / --- / moduli
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

È ancora possibile in Drupal 8? In caso affermativo, come dovrei inserire nello spazio dei nomi le mie classi in modo che il caricatore automatico possa risolverlo nella struttura di cartelle corretta?

ad esempio: Drupal \ Collection_Alpha \ module_a \ myClass1?


2
Sono abbastanza sicuro che la risoluzione dello spazio dei nomi sarà registrata come "/ path / to / module / src", quindi non dovresti fare nulla di diverso per i moduli 'sub'. cioè il modulo principale sarà Drupal\my_modulein 'my_module / src', il modulo secondario sarà Drupal\my_submodulein 'my_module / modules / my_submodule / src', e così via
Clive

Grazie Clive, ha senso! Che dire delle sottocartelle? Qualche idea se questo è ancora supportato e come sarebbe con il caricamento automatico di una classe?
dustinmoris,

Risposte:


7

@Clive è corretto.

Lo spazio dei nomi è sempre Drupal\{module_name} . Il luogo in cui vive quel modulo è irrilevante (purché sia ​​da qualche parte in cui Drupal può trovarlo). Quello spazio dei nomi punta sempre a $path_to_module/src.

Probabilmente non funzionerebbe in nessun altro modo. Siti diversi hanno moduli in una struttura diversa e luoghi diversi, ma lo stesso codice deve funzionare ovunque.


Grazie Clive e Berdir! Suppongo di avere un'altra domanda di follow-up: è possibile registrare uno spazio dei nomi aggiuntivo che punta anche alla cartella dei moduli? ad esempio: DrupalModules \ {nome_modulo} per puntare a $ percorso_modulo / src? Chiedo di capire meglio come progettare le nostre lezioni oggi per avere poco attrito quando ci si sposta alla D8 un giorno.
dustinmoris,

1
Se le classi sono specifiche di Drupal (ovvero non stai scrivendo una libreria autonoma), sarebbe probabilmente meglio tenerle sotto \Drupalper coerenza. Ma comunque una domanda interessante, ti incoraggio a porla come una domanda separata. In caso contrario, probabilmente lo farò :)
Clive

1
Probabilmente potresti, sì, vedere system_register () e drupal_classloader_register (). Quelle funzioni di supporto hardcode "Drupal \", ma è possibile ottenere direttamente il servizio class_loader. Ma come ha detto @Clive, non consiglierei di farlo, non c'è davvero un motivo per farlo, a meno che tu non includa una libreria esterna.
Berdir,

Coolio, ha senso! Grazie ragazzi! @Clive: Come hai suggerito, ho creato drupal.stackexchange.com/questions/142309/…
dustinmoris,

Puoi già controllare il modulo mongodb per vedere la struttura.

6

Lo spazio dei nomi si basa sul caricamento automatico di PSR-4, controlla le specifiche http://www.php-fig.org/psr/psr-4 .

Se si desidera sottomoduli, è possibile utilizzare la struttura di cartelle successiva. D8:

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

Lo spazio dei nomi per "my_module":

Drupal\my_module\Controller\A

Lo spazio dei nomi per "my_sub_module":

Drupal\my_sub_module\Controller\B

Vedi gli spazi dei nomi PSR-4 e il caricamento automatico in Drupal 8 per maggiori informazioni.


Grazie dmouse. Inizialmente ho pubblicato la mia domanda sulla risorsa collegata su Drupal.org e ora ho modificato la mia domanda per indicare anche questa discussione;)
dustinmoris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.