Класс ContainerBag
Класс ContainerBag представляет собой обёртку над массивом параметров контейнера внедрения зависимостей. Он реализует интерфейс ContainerBagInterface и позволяет получать доступ к параметрам через методы get, has и all. Основное назначение класса - предоставить сервисам доступ к параметрам контейнера без прямой зависимости от самого контейнера.
Класс ContainerBag принимает в конструкторе объект ContainerInterface. Параметры, хранящиеся в контейнере, становятся доступны через методы этого класса. Метод get возвращает значение параметра по имени, метод has проверяет наличие параметра, а метод all возвращает все параметры в виде массива.
Синтаксис
<?php
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
$bag = new ContainerBag($container);
$bag->get(string $name): mixed;
$bag->has(string $name): bool;
$bag->all(): array;
?>
Пример
Давайте создадим контейнер с параметрами и обернём его в ContainerBag:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
class ParameterService
{
public function getParameters(): array
{
$container = new Container();
$container->setParameter('app_name', 'article');
$container->setParameter('app_version', '1.0');
$container->setParameter('app_debug', true);
$bag = new ContainerBag($container);
return [
'name' => $bag->get('app_name'),
'version' => $bag->get('app_version'),
'debug' => $bag->get('app_debug'),
];
}
}
?>
Результат выполнения кода:
["name" => "article", "version" => "1.0", "debug" => true]
Пример
Давайте проверим наличие параметра с помощью метода has:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
class ParameterService
{
public function checkParameter(): bool
{
$container = new Container();
$container->setParameter('app_name', 'article');
$bag = new ContainerBag($container);
return $bag->has('app_name');
}
}
?>
Результат выполнения кода:
true
Пример
Давайте получим все параметры контейнера с помощью метода all:
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
class ParameterService
{
public function getAllParameters(): array
{
$container = new Container();
$container->setParameter('app_name', 'article');
$container->setParameter('app_version', '1.0');
$bag = new ContainerBag($container);
return $bag->all();
}
}
?>
Результат выполнения кода:
["app_name" => "article", "app_version" => "1.0"]