Dalam pengontrol Anda menyuntikkan layanan dengan menggunakan wadah layanan. Sebagai contoh ModuleHandler:
namespace Drupal\mymodule\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
class MyController extends ControllerBase {
/**
* The module handler service.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* Constructs a MyController object
*
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler service.
*/
public function __construct(ModuleHandlerInterface $module_handler) {
$this->moduleHandler = $module_handler;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('module_handler')
);
}
Maka Anda dapat menghindari \Drupalpanggilan dengan menggunakan layanan yang disuntikkan:
$this->moduleHandler->alter('mymodule_myfunction', $plugin_items);
Anda dapat menyuntikkan layanan apa pun, yang ada dari inti / contrib atau layanan yang Anda tetapkan dalam kode khusus dalam *.services.ymlfile.
Untuk menemukan nama layanan inti yang biasa saya lihat core.services.yml, karena itulah cara tercepat ketika Anda mengerjakan proyek drupal di IDE Anda.
Anda dapat menggunakan Konsol Drupal untuk mendaftar semua layanan, tidak hanya dari inti:
drupal debug:container
Anda juga dapat menggunakan modul Devel , yang memungkinkan Anda mencari nama:
/devel/container/service
createakan membebani metode induk - di sini Anda dapat menyuntikkan layanan yang Anda butuhkan. Konstruktor kemudian akan membiarkan Anda menetapkan mereka ke variabel instan di kelas, sehingga Anda dapat menggunakan$this->fooInjectedClass->methodName()