Thư mục con và cách các lớp không gian tên


11

Trong Drupal 7 tôi có thể có một mô-đun bên trong một mô-đun khác. Đây có phải vẫn là trường hợp trong Drupal 8 không và làm thế nào tôi có thể đặt tên các lớp bên trong mô-đun phụ?

Một điều khác tôi có thể làm trong Drupal 7 là tạo các thư mục con bên trong thư mục mô-đun để nhóm các mô-đun của tôi.

Thí dụ:

trang web
--- / tất cả
--- / --- / mô-đun
--- / --- / --- / Bộ sưu
tập_Alpha --- / --- / --- / --- / module_a
--- / - - / --- / --- / module_b
--- / --- / --- / Collection_Beta
--- / --- / --- / --- / module_x
--- / --- / --- / --- / module_y

Điều này vẫn có thể có trong Drupal 8? Nếu có, làm thế nào tôi phải đặt không gian tên các lớp của mình để trình tải tự động có thể phân giải nó thành cấu trúc thư mục chính xác?

ví dụ: Drupal \ Collection_Alpha \ module_a \ myClass1?


2
Tôi khá chắc chắn độ phân giải không gian tên sẽ được đăng ký là "/ path / to / module / src", vì vậy bạn không cần phải làm gì khác cho các mô-đun 'phụ'. tức là mô-đun chính sẽ Drupal\my_moduleở trong 'my_module / src', mô-đun phụ sẽ Drupal\my_submoduleở 'my_module / mô-đun / my_submodule / src', v.v.
Clive

Cảm ơn Clive, điều đó có ý nghĩa! Còn thư mục con thì sao? Bất cứ ý tưởng nào nếu điều này vẫn được hỗ trợ và nó sẽ trông như thế nào với việc tự động tải một lớp?
Dustinmoris

Câu trả lời:


7

@Clive đúng.

Không gian tên luôn luôn Drupal\{module_name} . Nơi mà mô-đun sống là không liên quan (miễn là nó ở đâu đó nơi Drupal có thể tìm thấy nó). Không gian tên đó luôn luôn trỏ đến$path_to_module/src .

Nó sẽ không thể hoạt động theo bất kỳ cách nào khác. Các trang web khác nhau có các mô-đun trong một cấu trúc khác nhau và các địa điểm khác nhau, nhưng cùng một mã phải hoạt động bất kể ở đâu.


Cảm ơn Clive và Berdir! Tôi đoán tôi có thêm một câu hỏi tiếp theo: Có thể đăng ký một không gian tên bổ sung cũng trỏ đến thư mục mô-đun không? ví dụ: DrupalModules \ {module_name} để trỏ đến $ path_to_module / src? Tôi đang yêu cầu hiểu rõ hơn về cách thiết kế các lớp học của chúng ta ngày hôm nay để có ít ma sát khi chuyển đến D8 một ngày.
Dustinmoris

1
Nếu các lớp là dành riêng cho Drupal (tức là bạn không viết thư viện độc lập), tốt hơn hết là giữ chúng theo mục \Drupalđích nhất quán. Nhưng dù sao câu hỏi thú vị, tôi khuyến khích bạn nên hỏi nó như một câu hỏi riêng biệt. Trong thực tế nếu bạn không, tôi có thể sẽ :)
Clive

1
Có lẽ bạn có thể, vâng, xem system_register () và drupal_grouploader_register (). Những người trợ giúp này có chức năng mã hóa cứng "Drupal \", nhưng bạn có thể nhận được dịch vụ class_loader trực tiếp. Nhưng như @Clive đã nói, tôi không khuyên bạn nên làm điều đó, thực sự không có lý do gì để làm như vậy, trừ khi bạn bao gồm một thư viện bên ngoài.
Berdir

Coolio, điều đó có ý nghĩa! Cảm ơn các bạn! @Clive: Như bạn đề xuất, tôi đã tạo drupal.stackexchange.com/questions/142309/ Đổi
Dustinmoris

Bạn có thể kiểm tra mô đun mongodb để xem cấu trúc.

6

Các không gian tên được dựa trên tự động tải PSR-4, kiểm tra thông số kỹ thuật http://www.php-fig.org/psr/psr-4 .

Nếu bạn muốn mô-đun phụ, Bạn có thể sử dụng cấu trúc thư mục tiếp theo. d8:

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

Không gian tên cho "my_module":

Drupal\my_module\Controller\A

Không gian tên cho "my_sub_module":

Drupal\my_sub_module\Controller\B

Xem các không gian tên PSR-4 và tự động tải trong Drupal 8 để biết thêm thông tin.


Cảm ơn dmouse. Ban đầu tôi đã đăng câu hỏi của mình lên tài nguyên được liên kết trên Drupal.org và bây giờ tôi cũng đã chỉnh sửa câu hỏi của mình để chỉ vào chủ đề này;)
Dustinmoris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.