Bir kontrolörde servis kabını kullanarak servis enjekte edersiniz. Örneğin 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')
);
}
Ardından \Drupal
, enjekte edilen hizmeti kullanarak aramalardan kaçınabilirsiniz :
$this->moduleHandler->alter('mymodule_myfunction', $plugin_items);
Herhangi bir hizmeti, çekirdek / katkıda bulunan mevcut hizmetleri veya özel kodda tanımladığınız hizmetleri bir *.services.yml
dosyaya enjekte edebilirsiniz .
Genel olarak baktığım temel hizmet adını bulmak için core.services.yml
, çünkü IDE'nizde bir drupal proje üzerinde çalışırken en hızlı yol budur.
Drupal Console'u sadece temelden değil tüm hizmetleri listelemek için kullanabilirsiniz :
drupal debug:container
Bir ad aramanıza izin veren Devel modülünü de kullanabilirsiniz :
/devel/container/service
create
üst yöntemi aşırı yükleyecektir - burada ihtiyacınız olan hizmetleri enjekte edebilirsiniz. Yapıcı daha sonra bunları sınıftaki örnek değişkenlere atamanıza izin verir, böylece kullanabilirsiniz$this->fooInjectedClass->methodName()