Класс Container
Класс Container представляет собой контейнер внедрения зависимостей (DI-контейнер) в Symfony. Он хранит определения сервисов и отвечает за их создание, хранение и выдачу. Первым параметром конструктор принимает массив параметров, вторым - массив определений сервисов. Доступ к сервисам осуществляется через методы get и has.
Синтаксис
new Container(array $parameters = [], array $services = [])
Пример
Давайте создадим контейнер и получим из него сервис:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
class ContainerExample
{
public function demo(): string
{
$container = new Container();
$container->set('app.name', 'article');
if ($container->has('app.name')) {
return $container->get('app.name');
}
return 'hello';
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте проверим наличие сервиса в контейнере:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
class ContainerCheck
{
public function check(): bool
{
$container = new Container();
$container->set('app.name', 'abcde');
return $container->has('app.name');
}
}
?>
Результат выполнения кода:
true
Пример
Давайте получим сервис из контейнера в контроллере через внедрение зависимости:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\DependencyInjection\ContainerInterface;
class ContainerController extends AbstractController
{
#[Route('/container', name: 'container_index')]
public function index(ContainerInterface $container): Response
{
$name = $container->getParameter('kernel.environment');
return new Response($name);
}
}
?>
Результат выполнения кода для адреса /container:
dev
Пример
Давайте проверим наличие параметра в контейнере и выведем его значение:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
class ContainerParam
{
public function getParam(): string
{
$container = new Container(['app.locale' => 'abcde']);
if ($container->hasParameter('app.locale')) {
return $container->getParameter('app.locale');
}
return 'hello';
}
}
?>
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
get,
который возвращает сервис из контейнера -
метод
has,
который проверяет наличие сервиса в контейнере -
класс
ServiceLocator,
который предоставляет доступ к сервисам по требованию -
атрибут
Autowire,
который автоматически внедряет зависимости в сервисы