Атрибут AsAlias
Атрибут AsAlias вешается на класс сервиса
и создаёт для него псевдоним в контейнере
зависимостей. Первым параметром передаётся имя
псевдонима. После регистрации сервис можно
получить из контейнера как по имени класса,
так и по указанному псевдониму.
Синтаксис
#[AsAlias(id, public: false)]
Пример
Давайте создадим сервис и повесим на его класс
атрибут AsAlias с псевдонимом 'my_alias':
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionAttributeAsAlias;
#[AsAlias('my_alias')]
class ArticleService
{
public function getText(): string
{
return 'hello';
}
}
?>
Теперь сервис доступен в контейнере по имени ArticleService и по псевдониму my_alias. Получим его в контроллере:
<?php
namespace AppController;
use AppServiceArticleService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ArticleService $service): Response
{
return new Response($service->getText());
}
}
?>
Результат выполнения кода:
hello
Пример
Давайте сделаем псевдоним публичным, чтобы
получить сервис напрямую из контейнера через
метод get:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionAttributeAsAlias;
#[AsAlias('my_alias', public: true)]
class ArticleService
{
public function getText(): string
{
return 'abcde';
}
}
?>
Теперь получим сервис из контейнера по псевдониму:
<?php
namespace AppController;
use AppServiceArticleService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$service = $this->container->get('my_alias');
return new Response($service->getText());
}
}
?>
Результат выполнения кода:
abcde
Смотрите также
-
класс
Container,
который хранит сервисы приложения -
метод
get,
который возвращает сервис из контейнера -
атрибут
AsDecorator,
который декорирует существующий сервис -
атрибут
Required,
который помечает обязательный сервис