Підпапки та спосіб класів простору імен


11

У Drupal 7 я можу мати модуль всередині іншого модуля. Це все ще буває в Drupal 8 і як я можу класи простору імен всередині підмодуля?

Ще одна річ, яку я можу зробити в Drupal 7 - це створити підпапки всередині папки модулів, щоб згрупувати мої модулі.

Приклад:

сайти
--- / всі
--- / --- / модулі
--- / --- / --- / Колекція_Альфа
--- / --- / --- / --- / 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 / module / my_submodule / src", і так далі
Clive

Дякую Клайву, це має сенс! Що з підпапками? Будь-яка ідея, якщо це все-таки підтримується і як це виглядатиме з автоматичним завантаженням класу?
dustinmoris

Відповіді:


7

@Clive правильний.

Простір імен завжди Drupal\{module_name} . Там, де цей модуль живе, не має значення (доки він знаходиться десь там, де Друпал може його знайти). На цей простір імен завжди вказується $path_to_module/src.

Це, можливо, не спрацювало б інакше. На різних сайтах є модулі в різній структурі та в різних місцях, але той самий код повинен працювати незалежно де.


Дякую Клайву та Бердіру! Я думаю, у мене є ще одне додаткове запитання: чи можливо зареєструвати додатковий простір імен, який також вказує на папку модулів? наприклад: DrupalModules \ {module_name}, щоб вказати на $ path_to_module / src? Я прошу краще зрозуміти, як розробити наші класи сьогодні, щоб мати невелике тертя при переході до D8 одного дня.
dustinmoris

1
Якщо класи специфічні для Drupal (тобто ви не пишете окрему бібліотеку), можливо, було б краще тримати їх \Drupalдля послідовності. Але все ж цікаве запитання, я б радив вам поставити його як окреме питання. Насправді, якщо ви цього не зробите, я, мабуть, буду :)
Клайв

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

Додаткову інформацію див. У просторах імен PSR-4 та автоматичному завантаженні в Drupal 8 .


Спасибі мамочка. Спочатку я розмістив своє запитання на пов'язаному ресурсі на Drupal.org, а тепер я відредагував власне питання, щоб також вказати на цю тему;)
dustinmoris
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.