Метод get класса Container
Метод get класса Container возвращает
сервис из контейнера зависимостей по его
идентификатору. Первым параметром передаётся
идентификатор сервиса в виде строки. Если сервис
не найден, метод выбрасывает исключение
ServiceNotFoundException.
Синтаксис
public function get(string $id, int $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE): ?object
Пример
Давайте получим сервис mailer из контейнера:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$container = $this->container;
$mailer = $container->get('mailer');
return new Response(get_class($mailer));
}
}
?>
Результат выполнения кода:
"Symfony\Component\Mailer\Mailer"
Пример
Давайте получим сервис по имени класса через
автовайринг. Для этого передадим в метод
get полное имя класса:
<?php
namespace App\Controller;
use App\Service\ArticleService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$container = $this->container;
$service = $container->get(ArticleService::class);
return new Response($service->getTitle());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте получим сервис из контейнера внутри
команды и выведем список сервисов, которые
начинаются на 'user':
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
#[AsCommand(name: 'app:article')]
class ArticleCommand extends Command
{
public function __construct(
private ContainerInterface $container
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$service = $this->container->get('user.service');
$output->writeln($service::class);
return Command::SUCCESS;
}
}
?>
Результат выполнения кода:
"App\Service\UserService"
Смотрите также
-
класс
Container,
который управляет сервисами приложения -
метод
has,
который проверяет наличие сервиса в контейнере -
метод
initialized,
который проверяет инициализацию сервиса -
класс
ServiceLocator,
который предоставляет доступ к набору сервисов