Sous-dossiers et comment classer les classes d'espace de noms

11

Dans Drupal 7, je peux avoir un module dans un autre module. Est-ce toujours le cas dans Drupal 8 et comment pourrais-je nommer des classes d'espaces à l'intérieur du sous-module?

Une autre chose que je peux faire dans Drupal 7 est de créer des sous-dossiers dans le dossier modules pour regrouper mes modules.

Exemple:

sites
--- / tous
--- / --- / modules
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

Est-ce toujours possible dans Drupal 8? Si oui, comment devrais-je nommer mes classes pour que l'autochargeur puisse le résoudre dans la bonne structure de dossiers?

par exemple: Drupal \ Collection_Alpha \ module_a \ myClass1?

dustinmoris
la source
2
Je suis presque sûr que la résolution de l'espace de noms sera enregistrée en tant que "/ chemin / vers / module / src", vous ne devriez donc pas avoir besoin de faire autre chose pour les modules "sous". c'est-à-dire que le module principal sera Drupal\my_moduledans 'mon_module / src', le sous-module sera Drupal\my_submoduledans 'mon_module / modules / mon_submodule / src', et ainsi de suite
Clive
Merci Clive, c'est logique! Qu'en est-il des sous-dossiers? Une idée si cela est toujours pris en charge et à quoi cela ressemblerait avec le chargement automatique d'une classe?
dustinmoris

Réponses:

7

@Clive est correct.

L'espace de noms est toujours Drupal\{module_name} . L'endroit où ce module réside n'est pas pertinent (tant qu'il est quelque part où Drupal peut le trouver). Cet espace de noms pointe toujours vers $path_to_module/src.

Cela ne fonctionnerait pas autrement. Différents sites ont des modules dans une structure et des endroits différents, mais le même code doit fonctionner, peu importe où.

Berdir
la source
Merci Clive et Berdir! Je suppose que j'ai une autre question de suivi: est-il possible d'enregistrer un espace de noms supplémentaire qui pointe également vers le dossier des modules? par exemple: DrupalModules \ {module_name} pour pointer vers $ path_to_module / src? Je demande à mieux comprendre comment concevoir nos classes aujourd'hui pour avoir peu de friction lors du passage à D8 un jour.
dustinmoris
1
Si les classes sont spécifiques à Drupal (c'est-à-dire que vous n'écrivez pas une bibliothèque autonome), il serait sans doute préférable de les conserver \Drupalpour des raisons de cohérence. Mais une question intéressante néanmoins, je vous encourage à la poser comme une question distincte. En fait, si vous ne le faites pas, je le ferai probablement :)
Clive
1
Vous pourriez probablement, oui, voir system_register () et drupal_classloader_register (). Ces fonctions d'assistance codent en dur "Drupal \", mais vous pouvez obtenir directement le service class_loader. Mais comme l'a dit @Clive, je ne recommanderais pas de le faire, il n'y a pas vraiment de raison de le faire, sauf si vous incluez une bibliothèque externe.
Berdir
Coolio, ça a du sens! Merci les gars! @Clive: Comme vous l'avez suggéré, j'ai créé drupal.stackexchange.com/questions/142309/…
dustinmoris
Vous pouvez déjà vérifier le module mongodb pour voir la structure.
6

Les espaces de noms sont basés sur le chargement automatique PSR-4, vérifiez les spécifications http://www.php-fig.org/psr/psr-4 .

Si vous voulez des sous-modules, vous pouvez utiliser la structure de dossiers suivante. d8:

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

L'espace de noms pour le "my_module":

Drupal\my_module\Controller\A

L'espace de noms pour le "my_sub_module":

Drupal\my_sub_module\Controller\B

Voir Espaces de noms PSR-4 et chargement automatique dans Drupal 8 pour plus d'informations.

dmouse
la source
Merci dmouse. Au départ, j'ai posté ma question sur la ressource liée sur Drupal.org et maintenant j'ai édité ma propre question pour pointer sur ce fil aussi;)
dustinmoris