Tôi có nhiều kinh nghiệm với D7 nhưng không nhiều với D8, vì vậy tôi đang tự hỏi về cách làm việc D8 "đúng đắn" ở đây.
Vì vậy, tôi đã có ModuleA và ModuleB
ModuleB phụ thuộc vào ModuleA.
Tôi cần gọi một hàm từ ModuleA bên trong ModuleB.
Trong D7, điều này được thực hiện bởi module_load_include () và D8 dường như có cả chức năng này cũng như lớp ModuleHandler.
Tôi đang cố gắng khởi tạo lớp này và sử dụng phương thức tải, nhưng nó đang gây ra lỗi vì tôi không truyền gì cho hàm tạo:
$ module_handler = new \ Drupal \ Core \ Extension \ ModuleHandler; $ module_handler-> tải ('ilib_connect');
TypeError: Argument 3 passed to Drupal\Core\Extension\ModuleHandler::__construct() must implement interface Drupal\Core\Cache\CacheBackendInterface, none given, called in /var/www/company/web/modules/custom/ilib_sso/ilib_sso.module on line 31 in Drupal\Core\Extension\ModuleHandler->__construct() (line 109 of core/lib/Drupal/Core/Extension/ModuleHandler.php).
Vì vậy, hiện tại tôi không chuyển bất cứ thứ gì cho hàm tạo (không chắc chắn chính xác sẽ truyền gì) và gọi phương thức tĩnh không phải là vấn đề, bởi vì phương thức load () tham chiếu đến đối tượng của nó và do đó gây ra lỗi này:
Error: Using $this when not in object context in Drupal\Core\Extension\ModuleHandler::load() (line 122 of core/lib/Drupal/Core/Extension/ModuleHandler.php).
Vì vậy, làm thế nào tôi có thể sử dụng lớp đặc biệt này? Hay tôi chỉ nên sử dụng module_load_include ()?
Drupal 8 cách làm việc là gì?
\Drupal::moduleHandler()
hoặc tiêm vào lớp nhận biết vùng chứa của riêng bạn để có phiên bản được khởi tạo hoàn toàn
\Drupal::moduleHandler()->loadInclude($foo, $bar);
, ("sử dụng" là một phần của văn bản trong bình luận cuối cùng đó, không phải mã, có thể hiểu tại sao nó khó hiểu)