Symfony, похоже, отходит от прямого доступа к контейнеру сервисов и использует инъекцию зависимостей для получения сервисов внутри контроллеров.Кроме того, Sylius полностью поддерживает это - большинство их собственных контроллеров даже не расширяют старые базовые контроллеры Symfony.
Есть две вещи, которые вы можете попробовать.Во-первых, если вы хотите получить доступ к службам непосредственно из контейнера служб (И эти службы являются общедоступными), вы можете внедрить экземпляр контейнера служб в своем конструкторе.
private $fullServiceContainer;
public function __construct(
\Symfony\Component\DependencyInjection\ContainerInterface $container
) {
$this->fullServiceContainer = $container;
}
//...
$this->fullServiceContainer->get('sylius.repository.product')
Во-вторых, вы можете внедрить службусебя если служба имеет имя или псевдоним, который выглядит как класс PHP.Я вижу, что служба sylius.repository.product
существует в контейнере
$ php bin/console debug:container sylius.repository.product
Information for Service "sylius.repository.product"
===================================================
---------------- ---------------------------------------------------------
Option Value
---------------- ---------------------------------------------------------
Service ID sylius.repository.product
Class Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository
Tags -
Public yes
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired no
Autoconfigured no
---------------- ---------------------------------------------------------
, но ее класс - Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository
, по-видимому, не связан со службой.
$ php bin/console debug:container ProductRepository
No services found that match "ProductRepository".
Это означает, что если вы хотите внедрить репозиторий продукта, вам потребуется создать псевдоним в вашем собственном приложении Symfony, и это начинает выходить за рамки одного ответа переполнения стека.
Две статьи (самостоятельные ссылки), которые могут быть вам интересны, если вы хотите обернуть голову вокруг Sylius / Symfony и сервисного контейнера.
Сервисный контейнер Symfony
Symfony: Услуги по электромонтажу https://alanstorm.com/symfonys-service-container/