Контроллеры в Symfony

Контроллер — это созданная вами PHP-функция, которая считывает информацию из объекта Request и создает объект Response и возвращает его. Ответом может быть HTML-страница, JSON, XML, загрузка файла, редирект, ошибка 404 или что-то еще. Контроллер выполняет любую произвольную логику, необходимую вашему приложению для отображения содержимого страницы.

    Контроллер

    Контроллер — это метод , который находится внутри класса контроллера

    // src/Controller/LuckyController.php namespace App\Controller; //use импортирует класс Response, который должен возвращать контроллер. use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; // дополнительный базовый класс контроллера AbstractController //чтобы получить доступ к вспомогательным методам. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; //добавляется суффикс Controller class LuckyController extends AbstractController { //Сопоставление маршрута #[Route('/lucky/number/{max}', name: 'app_lucky_number')] public function number(int $max): Response { $number = random_int(0, $max); //Контроллер создает и возвращает объект Response return new Response( 'Lucky number: '.$number.'' ); } }
    Генерация URL-адресов

    generateUrl() — это вспомогательный метод, который генерирует URL для заданного маршрута
    https://github.com/symfony/symfony/blob/8.0/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php#:~:text=function%20generateUrl

    $url = $this->generateUrl('app_lucky_number', ['max' => 10]);
    Перенаправление

    Если вы хотите перенаправить пользователя на другую страницу, используйте методы redirectToRoute() и redirect()

    use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; // ... public function index(): RedirectResponse { // redirects to the "homepage" route return $this->redirectToRoute('homepage'); // redirectToRoute is a shortcut for: // return new RedirectResponse($this->generateUrl('homepage')); // does a permanent HTTP 301 redirect return $this->redirectToRoute('homepage', [], 301); // if you prefer, you can use PHP constants instead of hardcoded numbers return $this->redirectToRoute('homepage', [], Response::HTTP_MOVED_PERMANENTLY); // redirect to a route with parameters return $this->redirectToRoute('app_lucky_number', ['max' => 10]); //перенаправляет на маршрут и сохраняет исходные параметры строки запроса return $this->redirectToRoute('blog_show', $request->query->all()); // redirects to the current route return $this->redirectToRoute($request->attributes->get('_route')); // редирект на внешний источник return $this->redirect('http://symfony.com/doc'); }
    Шаблоны рендеринга

    Если вы обслуживаете HTML-запрос, вам нужно отобразить шаблон. Метод render() отображает шаблон и помещает его содержимое в объект Response
    Подробнее: https://symfony.com/doc/current/templates.html

    return $this->render('lucky/number.html.twig', ['number' => $number]);
    Получение услуг

    Symfony поставляется со множеством полезных классов и функций, называемых сервисами
    https://symfony.com/doc/current/service_container.html
    Они используются для рендеринга шаблонов, отправки электронных писем, запросов к базе данных и любой другой «работы», которую только можно себе представить.


    Если вам нужен сервис в контроллере, укажите в подсказке типа аргумент с именем класса (или интерфейса), и Symfony автоматически внедрит его. Для этого необходимо, чтобы ваш контроллер был зарегистрирован как сервис

    use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Response; // ... #[Route('/lucky/number/{max}')] public function number(int $max, LoggerInterface $logger): Response { $logger->info('We are logging!'); // ... } #Список всех сервисов php bin/console debug:autowiring

    Как и в случае со всеми сервисами, в ваших контроллерах можно использовать обычную инъекцию через конструктор.
    https://symfony.com/doc/current/service_container.html

    Создание контроллеров

    Чтобы сэкономить время, можно использовать Symfony Maker, чтобы автоматически сгенерировать новый класс контроллера
    https://symfony.com/bundles/SymfonyMakerBundle/current/index.html

    #Создать контроллер и шаблон php bin/console make:controller BrandNewController #Если вы хотите создать полноценный CRUD на основе Doctrine entity, используйте: php bin/console make:crud Product created: src/Controller/ProductController.php created: src/Form/ProductType.php created: templates/product/_delete_form.html.twig created: templates/product/_form.html.twig created: templates/product/edit.html.twig created: templates/product/index.html.twig created: templates/product/new.html.twig created: templates/product/show.html.twig
    Обработка ошибок и страниц с ошибкой 404


    Источники
    Последнее изменение: 29.04.2026 22:10


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ