サブフォルダーとクラスの名前空間の設定方法


11

Drupal 7では、別のモジュール内にモジュールを配置できます。これはまだDrupal 8の場合ですか?サブモジュール内のクラスの名前空間はどのようになりますか?

Drupal 7でできるもう1つのことは、モジュールフォルダー内にサブフォルダーを作成してモジュールをグループ化することです。

例:

サイト
--- /すべて
--- / --- /モジュール
--- / --- / --- / 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 /モジュール/ my_submodule / src」に、そしてその上
クライヴ

Clive、ありがとうございます。サブフォルダーはどうですか?これがまだサポートされているか、クラスを自動ロードするとどのように見えるかというアイデアはありますか?
ダスティンモリス

回答:


7

@Cliveは正しいです。

名前空間は常に Drupal\{module_name}です。そのモジュールが存在する場所は無関係です(Drupalがそれを見つけることができる場所であれば)。その名前空間は常にを指します$path_to_module/src

他の方法では機能しない可能性があります。異なるサイトは異なる構造と異なる場所にモジュールを持っていますが、同じコードはどこでも動作しなければなりません。


CliveとBerdirに感謝します!私はもう1つのフォローアップ質問があると思います:モジュールフォルダを指す追加のネームスペースを登録することは可能ですか?例:DrupalModules \ {module_name}は$ path_to_module / srcを指しますか?ある日D8に移行する際に摩擦がほとんどないように、今日のクラスをどのように設計するかをよりよく理解してほしいと思っています。
ダスティンモリス

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

Drupal 8のPSR-4名前空間とオートロードを参照してくださいしてください。


dmouseに感謝します。最初に、Drupal.orgのリンクされたリソースに質問を投稿しましたが、このスレッドを指すように自分の質問を編集しました;)
dustinmoris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.