Subpastas e como classes de namespace

11

No Drupal 7, posso ter um módulo dentro de outro módulo. Esse ainda é o caso no Drupal 8 e como eu classificaria as classes de namespace dentro do submódulo?

Outra coisa que posso fazer no Drupal 7 é criar subpastas dentro da pasta modules para agrupar meus módulos.

Exemplo:

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

Isso ainda é possível no Drupal 8? Em caso afirmativo, como eu precisaria colocar um namespace em minhas classes para que o carregador automático possa resolvê-lo na estrutura de pastas correta?

por exemplo: Drupal \ Collection_Alpha \ module_a \ myClass1?

dustinmoris
fonte
2
Eu tenho certeza que a resolução do namespace será registrada como "/ path / to / module / src", portanto você não precisa fazer nada diferente para os 'sub' módulos. ou seja, o módulo principal estará Drupal\my_moduleem 'my_module / src', o submódulo estará Drupal\my_submoduleem 'my_module / modules / my_submodule / src' e assim por diante
Clive
Obrigado Clive, isso faz sentido! E as subpastas? Alguma idéia se isso ainda é suportado e como isso seria com o carregamento automático de uma classe?
precisa saber é o seguinte

Respostas:

7

@Clive está correto.

O espaço para nome é sempre Drupal\{module_name} . Onde esse módulo vive é irrelevante (desde que seja em algum lugar onde o Drupal possa encontrá-lo). Esse espaço para nome sempre aponta para $path_to_module/src.

Possivelmente não funcionaria de nenhuma outra maneira. Sites diferentes têm módulos em uma estrutura diferente e em lugares diferentes, mas o mesmo código deve funcionar, não importa onde.

Berdir
fonte
Obrigado Clive e Berdir! Acho que tenho mais uma pergunta de acompanhamento: É possível registrar um espaço para nome adicional que também aponte para a pasta modules? por exemplo: DrupalModules \ {module_name} para apontar para $ path_to_module / src? Estou pedindo para entender melhor como projetar nossas aulas hoje para ter pouco atrito ao passar para o D8 um dia.
precisa saber é o seguinte
1
Se as classes são específicas do Drupal (ou seja, você não está escrevendo uma biblioteca independente), seria melhor mantê-las em ordem \Drupalde coerência. Porém, pergunta interessante, no entanto, encorajo você a fazer uma pergunta separada. De fato, se você não tiver, eu provavelmente o farei :)
Clive
1
Você provavelmente poderia, sim, ver system_register () e drupal_classloader_register (). Essas funções auxiliares codificam o código "Drupal \", mas você pode obter o serviço class_loader diretamente. Mas como o @Clive disse, eu não recomendaria fazê-lo, não há realmente um motivo para fazê-lo, a menos que você inclua uma biblioteca externa.
Berdir 5/01/15
Coolio, isso faz sentido! Obrigado rapazes! @Clive: Como você sugeriu que eu criei drupal.stackexchange.com/questions/142309/...
dustinmoris
Você pode verificar o módulo mongodb já para ver a estrutura.
6

Os espaços para nome são baseados no carregamento automático do PSR-4, verifique a especificação http://www.php-fig.org/psr/psr-4 .

Se você deseja submódulos, você pode usar a próxima estrutura de pastas. d8:

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

O espaço para nome do "my_module":

Drupal\my_module\Controller\A

O espaço para nome do "my_sub_module":

Drupal\my_sub_module\Controller\B

Consulte PSP-4 namespaces e carregamento automático no Drupal 8 para obter mais informações.

dmouse
fonte
Obrigado dmouse. Inicialmente eu postei minha pergunta sobre o recurso vinculado no Drupal.org e agora eu editei a minha pergunta para apontar para esta discussão, bem;)
dustinmoris