Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Разработка

Маршрутизация в Symfony: конфигурация путей

После Laravel разберём второй крупнейший PHP-фреймворк — Symfony — и его подход к конфигурации маршрутов и путей.

Описание маршрутов через атрибуты прямо в контроллере

В современных версиях Symfony маршрут удобно описывать атрибутом непосредственно над методом контроллера. Так путь, имя маршрута и допустимые методы запроса находятся рядом с кодом, который его обрабатывает.

#[Route('/blog/{slug}', name: 'blog_show', methods: ['GET'])]
public function show(string $slug): Response
{
    // ...
}

Требования к параметрам как защита от лишних адресов

Symfony позволяет ограничить допустимые значения параметра регулярным выражением. Это важно для технического SEO: если слаг может состоять только из латинских букв, цифр и дефиса, то все прочие варианты адреса не будут обработаны маршрутом.

#[Route('/blog/{slug}', requirements: ['slug' => '[a-z0-9-]+'])]

Без такого ограничения маршрут может «съесть» неожиданные адреса и отдать для них страницу, порождая ненужные дубли.

Имена маршрутов и генерация ссылок

  • каждый маршрут получает уникальное имя;
  • ссылки в шаблонах формируются по имени, а не вручную;
  • изменение пути затрагивает лишь определение маршрута.

Единообразие адресов: слеш на конце и регистр

Решите заранее, будут ли адреса заканчиваться слешем, и настройте редирект с альтернативного варианта на основной. Так вы избежите ситуации, когда одна и та же страница доступна по двум адресам, что подробно разобрано в статьях про редиректы и дубли.

Локализованные маршруты для мультиязычных сайтов

Symfony позволяет задать для одного и того же маршрута разные пути в зависимости от языка. Это удобно для сайтов с несколькими языковыми версиями, где каждая версия должна иметь собственный читаемый адрес на своём языке.

  • для каждой языковой версии — отдельный префикс или домен;
  • единая логика именования маршрутов;
  • согласованная работа с атрибутами языка на страницах.

Отладка: как увидеть все существующие маршруты

Фреймворк предоставляет консольную команду, выводящую полный список зарегистрированных маршрутов с путями и допустимыми методами. Регулярный просмотр этого списка помогает найти пересекающиеся или лишние маршруты и убедиться, что структура адресов соответствует задуманной.

Корректная обработка отсутствующих материалов

Если по слагу из адреса запись не найдена, необходимо явно выбросить исключение «не найдено», чтобы сервер отдал код 404. Возврат пустой страницы с кодом 200 приводит к проблеме, подробно описанной в статье про мягкую 404.

Контроль изменений маршрутов при разработке в команде

Когда над проектом работает несколько разработчиков, определение маршрутов легко изменить незаметно для остальных. Включите просмотр изменений маршрутов в обязательную проверку кода, чтобы любая правка структуры адресов обсуждалась заранее и согласовывалась со специалистом по SEO.

Частые вопросы

Чем удобны атрибуты маршрутов в Symfony?

Они позволяют описать путь, имя и допустимые методы запроса прямо над методом контроллера, что делает код нагляднее и облегчает сопровождение.

Зачем ограничивать параметры маршрута регулярным выражением?

Это не позволяет маршруту обрабатывать посторонние адреса, снижая риск появления лишних страниц и дублей.

Как избежать дублей из-за завершающего слеша?

Выберите единый формат адресов и настройте редирект с альтернативного варианта на основной.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также

4 мин чтения

Роутинг в Express и Node.js

В Express маршрутизация даёт максимум свободы, но именно поэтому ответственность за корректные коды ответа и единообразие адресов целиком ложится на разработчика.

Читать статью →
4 мин чтения

Динамические маршруты в Next.js

В Next.js структура адресов задаётся структурой каталогов, а динамические сегменты в квадратных скобках превращают одну страницу в шаблон для сотен адресов.

Читать статью →