Làm cách nào để bao gồm tệp lớp tùy chỉnh trong mô-đun?


10

Trong quá trình phát triển mô-đun Drupal 7, tôi có thể bao gồm tệp lớp inc, api hoặc php tùy chỉnh bằng cách sử dụng tệp [] = directive trong tệp module.info hoặc hàm drupal_load_included ().

Với D8 sử dụng PSR, cách thích hợp để đóng gói một "đối tượng PHP đơn giản" và tham chiếu nó là DefaultController.phpgì? Hãy suy nghĩ một cái gì đó như : $a = new POPO();.

Là chỉ cung cấp cho tệp PHP chứa lớp là namespaceđủ? Làm thế nào để bộ điều khiển (hoặc mô-đun nói chung) biết để tham chiếu hoặc quét cho lớp đó?


Liên kết này Tạo các mô-đun Drupal 8.x có thể hữu ích
Krishna Mohan

Có, tôi đã đọc qua drupal.org/node/2087879 nhưng khi không thấy tệp [] = directive, thật không may không trả lời câu hỏi cụ thể này về việc bao gồm tệp.
Rick

Câu trả lời:


11

Bạn không sử dụng file[] = ...nữa. Thay vào đó, các lớp được tự động tải. Ví dụ: tôi có một mô-đun với cấu trúc tệp sau:

  • lượt xem_hy điều chỉnh /
    • lượt xem_hy điều.info.yml
    • lượt xem_hy điều.module
    • src /
      • Cắm vào/
        • Cánh đồng/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php định nghĩa một lớp được gọi là HybridFormatter.

Trong tệp .module của tôi, nếu tôi bắt đầu nhập vào IDE của mình (NetBeans trong trường hợp này), HybridFormatternó sẽ tự động hoàn tất \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::vì nó được tự động tải. Vì tôi không muốn toàn bộ con đường rải rác mô-đun của mình, ở đầu tôi đã đặt dòng,

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

cùng với các usechỉ thị cho các lớp khác mà tôi đang sử dụng với mô-đun của mình.

Không gian tên được định nghĩa trong HybridFormatter.php như vậy:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

Vì vậy, để đảm bảo tôi hoàn toàn hiểu, HybridFormatter.php sẽ được tự động tải ... tự động? Không cần có bao gồm_once ()? Liệu HybridFormatter.php có một không gian tên được xác định?
Rick

Không cần phải cho include_oncehoặc require_oncehoặc bất cứ điều gì. Hybridformatter.php không định nghĩa một không gian tên. Tôi sẽ bao gồm trong câu trả lời.
beth

@beth Bạn có thể giúp tôi không? drupal.stackexchange.com/questions/233565/ Kiếm
RobinSon

8

Tôi muốn thêm rằng để bao gồm một lớp tùy chỉnh không phù hợp với "trình điều khiển, biểu mẫu, biểu mẫu, v.v." của D8 mặc định, bạn vẫn có thể làm như vậy như đã lưu ý tổng quan về PSR-4 tại đây

Đối với trường hợp sử dụng của tôi, tôi đã bỏ "CustomClass.php" trong / mô-đun / tùy chỉnh / my_module / src / Ở đầu tệp tôi đã bao gồm khai báo không gian tên

namespace Drupal\my_module;

và trong tệp tôi muốn sử dụng nó (trong trường hợp cụ thể này là my_theme.theme) tôi đã thêm

use Drupal\my_module\CustomClass;
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.