하위 폴더 및 네임 스페이스 클래스 방법


11

Drupal 7에서는 다른 모듈 안에 모듈을 가질 수 있습니다. Drupal 8에서도 여전히 그렇습니까? 하위 모듈 내에서 네임 스페이스 클래스를 어떻게 사용합니까?

Drupal 7에서 할 수있는 또 다른 일은 모듈 폴더 안에 하위 폴더를 만들어 모듈을 그룹화하는 것입니다.

예:

사이트
--- / 모두
--- / --- / 모듈
--- / --- / --- / Collection_Alpha
--- / --- / --- / --- / module_a
--- /- -/ --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / 모듈 _y

Drupal 8에서도 여전히 가능합니까? 그렇다면 오토로더가 올바른 폴더 구조로 클래스를 해석 할 수 있도록 클래스 네임 스페이스를 어떻게 지정해야합니까?

예 : Drupal \ Collection_Alpha \ module_a \ myClass1?


2
네임 스페이스 확인이 "/ path / to / module / src"로 등록 될 것이라 확신하므로 '서브'모듈에 대해 다른 작업을 수행 할 필요가 없습니다. 즉, 메인 모듈은 Drupal\my_module'my_module / src'에 있고, 서브 모듈은 Drupal\my_submodule'my_module / modules / my_submodule / src'에 있습니다.
Clive

Clive에게 감사합니다. 하위 폴더는 어떻습니까? 이것이 여전히 지원되고 클래스를 자동로드 할 때 어떻게 보일지 알고 있습니까?
dustinmoris

답변:


7

@Clive가 맞습니다.

네임 스페이스는 항상 Drupal\{module_name} 입니다. Drupal이 찾을 수있는 한 해당 모듈의 수명은 관계가 없습니다. 해당 네임 스페이스는 항상을 가리 킵니다 $path_to_module/src.

다른 방법으로는 작동하지 않을 것입니다. 사이트마다 다른 구조와 장소에 모듈이 있지만 동일한 코드는 어디서나 작동해야합니다.


감사합니다 Clive와 Berdir! 추가 질문이 하나 더 있다고 생각합니다. 모듈 폴더를 가리키는 추가 네임 스페이스를 등록 할 수 있습니까? 예 : $ path_to_module / src를 가리키는 DrupalModules \ {module_name}? 나는 하루에 D8로 옮길 때 마찰이 거의 없도록 오늘 수업을 디자인하는 방법을 더 잘 이해하고 싶습니다.
dustinmoris

1
클래스가 Drupal에 특화된 경우 (즉, 독립형 라이브러리를 작성하지 않는 경우) \Drupal일관성 을 유지하기 위해 클래스를 유지하는 것이 좋습니다 . 그럼에도 불구하고 흥미로운 질문은 별도의 질문으로 질문하는 것이 좋습니다. 실제로 당신이하지 않으면, 아마 것입니다 :)
Clive

1
아마도 system_register ()와 drupal_classloader_register ()를 볼 수있을 것입니다. 이러한 도우미 기능은 "Drupal \"을 하드 코드하지만 class_loader 서비스를 직접 얻을 수 있습니다. 그러나 @Clive가 말했듯이 외부 라이브러리를 포함하지 않는 한 그렇게하지 않는 것이 좋습니다.
Berdir

쿨 리오! 고마워요! @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 네임 스페이스 및 자동로드 를 참조하십시오.


고마워요. 처음에 Drupal.org의 링크 된 리소스에 내 질문을 게시했으며 이제이 스레드를 가리 키도록 내 자신의 질문을 편집했습니다.)
dustinmoris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.