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 \Drupal
panggilan 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.yml
file.
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
create
akan 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()