РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
120 of 1361 menu

Атрибут 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"

Смотрите также

  • атрибут Route,
    который вешает метод контроллера на URL
  • атрибут Get,
    который вешает обработчик на GET-запрос
  • атрибут Post,
    который вешает обработчик на POST-запрос
  • параметр name,
    который задаёт имя маршрута или сервиса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить