Атрибут AsController
Атрибут AsController вешается на класс
и регистрирует его в контейнере как сервис-контроллер.
Это позволяет внедрять зависимости в конструктор
и вызывать методы класса как обычные сервисы.
Атрибут принимает необязательный параметр name,
который задаёт имя сервиса в контейнере.
Синтаксис
#[AsController]
#[AsController(name: service_name)]
Пример
Давайте создадим класс с атрибутом AsController
и внедрим в него зависимость через конструктор:
<?php
namespace AppController;
use AppServiceArticleService;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeAsController;
use SymfonyComponentRoutingAttributeRoute;
#[AsController]
class ArticleController
{
public function __construct(
private ArticleService $articleService
) {
}
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$res = $this->articleService->getTitle();
return new Response($res);
}
}
?>
Результат выполнения кода для адреса /article:
"article"
Пример
Давайте зададим явное имя сервиса через параметр name
и вызовем контроллер напрямую из другого сервиса:
<?php
namespace AppController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeAsController;
use SymfonyComponentRoutingAttributeRoute;
#[AsController(name: 'app.user_controller')]
class UserController
{
#[Route('/user', name: 'user_index')]
public function index(): Response
{
return new Response('user');
}
}
?>
Теперь этот контроллер доступен в контейнере
под именем app.user_controller.
Результат выполнения кода для адреса /user:
"user"