دریافت سرویس‌ها از Service Container

دریافت سرویس‌ها از Service Container

به شیوه‌های زیر می‌توانید از service container درخواست سرویس کنید:

قراردادن سرویس‌ها درون کلاس Command

استفاده از قسمت arguments هنگام ثبت کلاس Command در فایل console.services.yml.

services:
  example.example_default:
    class: Drupal\example\Command\DefaultCommand`
    arguments: ['@entity_type.manager']
    tags:
      - { name: drupal.command }

افزودن یک متغیر محافظت شده.

  /**
   * The $entityTypeManager definition.
   *
   * @var EntityTypeManager
   */
  protected $entityTypeManager;

ارسال سرویس با استفاده از متد __construct

  /**
   * Constructs a new DefaultCommand object.
   */
  public function __construct(EntityTypeManager $entity_type_manager) {
    $this->entityTypeManager = $entity_type_manager;
    parent::__construct();
  }

گسترش کلاس پایه ContainerAwareCommand در کلاس Command

با استفاده از این روش شما به service container دسترسی دارید، به عبارت دیگر، به هر سرویس پیکربندی شده موجود توسط متد get دسترسی دارید.

protected function execute(InputInterface $input, OutputInterface $output)
{
    $uid = $input->getArgument('uid');
    $entityTypeManager = $this->get('entity_type.manager');;
    if ($entityTypeManager) {
        $user = $entityTypeManager->getStorage('user')->load($uid);
    }
}