컨트롤러에서 서비스 컨테이너를 사용하여 서비스를 주입합니다. 예를 들면 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')
);
}
그런 다음 \Drupal
삽입 된 서비스를 사용하여 전화를 피할 수 있습니다 .
$this->moduleHandler->alter('mymodule_myfunction', $plugin_items);
코어 / 컨트리의 서비스, 기존 서비스 또는 사용자 지정 코드로 정의한 서비스를 *.services.yml
파일 에 삽입 할 수 있습니다.
core.services.yml
IDE에서 drupal 프로젝트를 작업 할 때 가장 빠른 방법이기 때문에 일반적으로 살펴 보는 핵심 서비스 이름을 찾으려면 .
Drupal Console 을 사용하면 코어뿐만 아니라 모든 서비스를 나열 할 수 있습니다 .
drupal debug:container
이름을 검색 할 수 있는 Devel 모듈을 사용할 수도 있습니다 .
/devel/container/service
create
부모 메소드를 오버로드합니다-여기에서 필요한 서비스를 주입 할 수 있습니다. 그러면 생성자는 클래스의 인스턴스 변수에 해당 변수를 할당 할 수 있으므로 다음을 사용할 수 있습니다.$this->fooInjectedClass->methodName()