Subcarpetas y cómo clases de espacio de nombres

11

En Drupal 7 puedo tener un módulo dentro de otro módulo. ¿Sigue siendo el caso en Drupal 8 y cómo haría yo las clases de espacio de nombres dentro del submódulo?

Otra cosa que puedo hacer en Drupal 7 es crear subcarpetas dentro de la carpeta de módulos para agrupar mis módulos.

Ejemplo:

sitios
--- / all
--- / --- / modules
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

¿Sigue siendo posible en Drupal 8? En caso afirmativo, ¿cómo tendría que asignar un espacio de nombres a mis clases para que el autocargador pueda resolverlo en la estructura de carpetas correcta?

por ejemplo: Drupal \ Collection_Alpha \ module_a \ myClass1?

dustinmoris
fuente
2
Estoy bastante seguro de que la resolución del espacio de nombres se registrará como "/ ruta / a / module / src", por lo que no debería necesitar hacer nada diferente para los módulos 'sub'. es decir, el módulo principal estará Drupal\my_moduleen 'my_module / src', el submódulo estará Drupal\my_submoduleen 'my_module / modules / my_submodule / src', y así sucesivamente
Clive
Gracias Clive, eso tiene sentido! ¿Qué pasa con las subcarpetas? ¿Alguna idea de si esto todavía es compatible y cómo se vería con la carga automática de una clase?
dustinmoris

Respuestas:

7

@Clive es correcto.

El espacio de nombres es siempre Drupal\{module_name} . Donde vive ese módulo es irrelevante (siempre y cuando sea en algún lugar donde Drupal pueda encontrarlo). Ese espacio de nombres siempre apunta a $path_to_module/src.

Posiblemente no funcionaría de otra manera. Diferentes sitios tienen módulos en una estructura diferente y diferentes lugares, pero el mismo código tiene que funcionar sin importar dónde.

Berdir
fuente
Gracias Clive y Berdir! Supongo que tengo una pregunta de seguimiento más: ¿es posible registrar un espacio de nombres adicional que también apunte a la carpeta de módulos? por ejemplo: DrupalModules \ {module_name} para apuntar a $ path_to_module / src? Estoy pidiendo entender mejor cómo diseñar nuestras clases hoy para tener poca fricción al cambiar a D8 algún día.
dustinmoris
1
Si las clases son específicas de Drupal (es decir, no está escribiendo una biblioteca independiente), podría decirse que sería mejor mantenerlas bajo \Drupalel nombre por razones de coherencia. Pero una pregunta interesante, no obstante, le animo a que la haga como una pregunta separada. De hecho, si no lo haces, probablemente lo haré :)
Clive
1
Probablemente podría, sí, ver system_register () y drupal_classloader_register (). Esas funciones auxiliares codifican "Drupal \", pero puede obtener el servicio class_loader directamente. Pero como dijo @Clive, no recomendaría hacerlo, no hay realmente una razón para hacerlo, a menos que esté incluyendo una biblioteca externa.
Berdir
Coolio, eso tiene sentido! ¡Gracias chicos! @Clive: Como sugirió, creé drupal.stackexchange.com/questions/142309/…
dustinmoris el
Puede consultar el módulo mongodb para ver la estructura.
6

Los espacios de nombres se basan en la carga automática de PSR-4, consulte la especificación http://www.php-fig.org/psr/psr-4 .

Si desea submódulos, puede usar la siguiente estructura de carpetas. d8:

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

El espacio de nombres para el "my_module":

Drupal\my_module\Controller\A

El espacio de nombres para el "my_sub_module":

Drupal\my_sub_module\Controller\B

Consulte los espacios de nombres PSR-4 y la carga automática en Drupal 8 para obtener más información.

dmouse
fuente
Gracias dmouse. Inicialmente publiqué mi pregunta en el recurso vinculado en Drupal.org y ahora he editado mi propia pregunta para señalar también este hilo;)
dustinmoris