Метод has класса ContainerBag
Метод has класса ContainerBag проверяет,
зарегистрирован ли сервис с указанным идентификатором
в контейнере зависимостей. Первым параметром передаётся
идентификатор сервиса в виде строки. Метод возвращает
true, если сервис существует, и false в
противном случае.
Класс ContainerBag реализует интерфейс
ContainerBagInterface и предоставляет доступ
к параметрам и сервисам контейнера. Метод has
часто используется совместно с методом get,
чтобы избежать ошибок при обращении к
несуществующим сервисам.
Синтаксис
public function has(string $id): bool
Пример
Давайте проверим наличие сервиса 'user' в контейнере:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(ContainerBagInterface $bag): Response
{
$res = $bag->has('user');
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Пример
Давайте проверим наличие параметра 'kernel.project_dir' в контейнере:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(ContainerBagInterface $bag): Response
{
$res = $bag->has('kernel.project_dir');
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Пример
Давайте используем метод has вместе с методом
get для безопасного получения значения:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(ContainerBagInterface $bag): Response
{
$id = 'kernel.project_dir';
if ($bag->has($id)) {
$res = $bag->get($id);
} else {
$res = 'not found';
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"/var/www/project"
Смотрите также
-
класс
ContainerBag,
который предоставляет доступ к параметрам контейнера -
метод
get,
который возвращает значение параметра контейнера -
метод
all,
который возвращает все параметры контейнера -
метод
resolveValue,
который разрешает значение параметра