Подтвердить что ты не робот

Как получить службы (зависимости) в пользовательском классе

В контроллере я мог бы сделать

$this->get('service.name')

Но в пользовательском классе, как я могу это сделать?

4b9b3361

Ответ 1

Определите свой собственный класс как службу, а затем вставьте в него зависимостей.

Пример:

// services.yml
services:
   my.custom.service.id:
       class: My\Custom\Class
       arguments:
         - @service.name
         - @doctrine.orm.entity_manager

Конструктор вашего пользовательского класса затем получит эти службы в качестве аргументов.

Обязательно прочитайте в Service Container в официальных документах. Он подробно описывает все это.

Ответ 2

Вы были на правильном пути с ContainerAware.

$this->get('id') на самом деле является ярлыком для $this->container->get('id'). И получение контейнера в ваш класс так же просто, как реализация ContainerAwareInterface - включение этого фрагмента в ваш класс:

public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null)
{
    $this->container = $container;
}

Ответ 4

Доступ к контейнеру службы в пользовательском классе (не в определенном сервисе)

Если ваш пользовательский класс не настроен как услуга, вы можете получить доступ к контейнеру службы с помощью глобальной переменной $kernel:

class Helper {

    private $container;

    /**
     * Constructor assigns service container to private container. 
     */
    public function __construct() {

        global $kernel;
        $this->container = $kernel->getContainer();

    }

    function doSOmething() {
        $someService = $this->container->get('service.name');
        // do something with someService ...
    }

}

Ответ 5

OK Я полагаю, что ответ @Arms - это возможное решение, я нашел, посмотрев на источник Controller, я мог бы расширить ContainerAware