একটি নিয়ামক আপনি পরিষেবা ধারক ব্যবহার করে পরিষেবা ইনজেক্ট। উদাহরণস্বরূপ 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 debug:container
আপনি দেভেল মডিউলটিও ব্যবহার করতে পারেন যা আপনাকে একটি নামের সন্ধান করতে দেয়:
/devel/container/service
create
প্যারেন্ট পদ্ধতিটি ওভারলোড করবে - এখানে আপনি আপনার প্রয়োজনীয় পরিষেবাগুলি ইনজেক্ট করতে পারেন। কনস্ট্রাক্টর আপনাকে ক্লাসে ভেরিয়েবলগুলি উদাহরণ হিসাবে নির্ধারণ করতে দেবে, যাতে আপনি ব্যবহার করতে পারেন$this->fooInjectedClass->methodName()