Метод resolveValue класса ContainerBag
Метод resolveValue класса ContainerBag
разрешает переданное значение и возвращает
соответствующий сервис или параметр из
контейнера зависимостей. Первым параметром
передаётся значение для разрешения: строка
с идентификатором сервиса, параметр контейнера
или уже готовый объект. Метод удобен внутри
сервисов, реализующих ContainerBagInterface,
когда нужно получить зависимость по её имени
без прямого доступа к контейнеру.
Синтаксис
public function resolveValue(mixed $value): mixed
Пример
Давайте создадим сервис, который реализует
ContainerBagInterface и разрешает
значение через метод resolveValue:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionParameterBagContainerBagInterface;
class ArticleResolver
{
private ContainerBagInterface $bag;
public function __construct(ContainerBagInterface $bag)
{
$this->bag = $bag;
}
public function resolve(string $id): mixed
{
return $this->bag->resolveValue($id);
}
}
?>
Теперь вызовем метод resolve и передадим
идентификатор сервиса 'AppServiceArticleService':
<?php
namespace AppController;
use AppServiceArticleResolver;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ArticleResolver $resolver): Response
{
$res = $resolver->resolve('AppServiceArticleService');
return new Response(get_class($res));
}
}
?>
Результат выполнения кода:
"AppServiceArticleService"
Пример
Давайте разрешим значение параметра контейнера
через resolveValue:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionParameterBagContainerBagInterface;
class ConfigResolver
{
private ContainerBagInterface $bag;
public function __construct(ContainerBagInterface $bag)
{
$this->bag = $bag;
}
public function getParam(string $name): mixed
{
return $this->bag->resolveValue('%' . $name . '%');
}
}
?>
Вызовем метод getParam с именем параметра
'kernel.project_dir':
<?php
namespace AppController;
use AppServiceConfigResolver;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/config', name: 'article_config')]
public function config(ConfigResolver $resolver): Response
{
$res = $resolver->getParam('kernel.project_dir');
return new Response($res);
}
}
?>
Результат выполнения кода:
"/var/www/project"
Смотрите также
-
класс
ContainerBag,
который предоставляет доступ к параметрам контейнера -
метод
get,
который возвращает сервис по идентификатору -
метод
has,
который проверяет наличие сервиса в контейнере -
метод
all,
который возвращает все сервисы контейнера