एक नियंत्रक में आप सेवा कंटेनर का उपयोग करके सेवाओं को इंजेक्ट करते हैं। उदाहरण के लिए 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
, क्योंकि यह सबसे तेज़ तरीका है जब आप अपने आईडीई में एक ड्रुपल प्रोजेक्ट पर काम कर रहे हैं।
आप कोर से ही नहीं, सभी सेवाओं को सूचीबद्ध करने के लिए Drupal Console का उपयोग कर सकते हैं :
drupal debug:container
आप डेवेल मॉड्यूल का उपयोग भी कर सकते हैं , जो आपको एक नाम खोजने की अनुमति देता है:
/devel/container/service
create
मूल विधि को अधिभारित करेगा - यहां आप अपनी ज़रूरत की सेवाओं को इंजेक्ट कर सकते हैं। कंस्ट्रक्टर तब आपको उन लोगों को कक्षा में चर उदाहरण देने के लिए नियत करेगा, जिससे आप उपयोग कर सकते हैं$this->fooInjectedClass->methodName()