子文件夹以及如何命名空间类


11

在Drupal 7中,我可以在另一个模块中包含一个模块。在Drupal 8中是否仍然如此,我将如何在子模块中命名空间类?

我在Drupal 7中可以做的另一件事是在modules文件夹内创建子文件夹以对我的模块进行分组。

例:

站点
--- /全部
--- / --- /模块
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- /- -/ --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / -/ --- / module_y

在Drupal 8中仍然有可能吗?如果是,我将如何为我的类命名空间,以便自动加载器可以将其解析为正确的文件夹结构?

例如:Drupal \ Collection_Alpha \ module_a \ myClass1吗?


2
我很确定名称空间解析将被注册为“ / path / to / module / src”,因此您无需对“ sub”模块做任何其他操作。即主模块将Drupal\my_module在“ my_module / src”中,子模块将Drupal\my_submodule在“ my_module / modules / my_submodule / src”中,依此类推
Clive

谢谢克莱夫,这很有意义!子文件夹呢?知道是否仍然支持该方法吗?自动加载类的外观如何?
dustinmoris

Answers:


7

@Clive是正确的。

名称空间始终为 Drupal\{module_name}。该模块所在的位置无关紧要(只要它在Drupal可以找到它的位置即可)。该命名空间始终指向$path_to_module/src

它不可能以任何其他方式起作用。不同的站点在不同的结构和不同的位置具有不同的模块,但是无论在何处,相同的代码都必须起作用。


谢谢克莱夫和伯迪尔!我想我还有一个后续问题:是否可以注册另外一个指向modules文件夹的命名空间?例如:DrupalModules \ {module_name}指向$ path_to_module / src?我要求更好地了解今天如何设计我们的课程,以便有一天过渡到D8。
dustinmoris

1
如果这些类是特定于Drupal的(即,您不是在编写独立的库),那么\Drupal出于一致性考虑,最好将它们保留在下面。但还是有一个有趣的问题,我鼓励您将其作为一个单独的问题进行提问。实际上,如果您不这样做,我可能会:)
克莱夫(Clive)

1
是的,您可能可以看到system_register()和drupal_classloader_register()。这些辅助函数的功能为“ Drupal \”,但您可以直接获得class_loader服务。但是正如@Clive所说,我不建议您这样做,实际上没有理由这样做,除非您包括一个外部库。
贝尔迪尔

Coolio,这很有道理!谢谢你们!@Clive:如你所说,我创建drupal.stackexchange.com/questions/142309/...
dustinmoris

您可以已经检查mongodb模块以查看其结构。

6

命名空间基于PSR-4自动加载,请查看规范http://www.php-fig.org/psr/psr-4

如果要子模块,则可以使用下一个文件夹结构。d8:

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

“ my_module”的名称空间:

Drupal\my_module\Controller\A

“ my_sub_module”的名称空间:

Drupal\my_sub_module\Controller\B

有关更多信息,请参见Drupal 8中的PSR-4名称空间和自动加载


谢谢dmouse。最初,我在Drupal.org上的链接资源上发布了我的问题,现在我也编辑了自己的问题以指向该线程;)
ustinmoris 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.