Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Динамические маршруты Веб-разработка на PHP

До сих пор мы встречались только со статическими маршрутами. В них нет изменяемых частей — адрес точно совпадает с маршрутом и не меняется, поэтому и называется статическим.

На практике чаще встречаются динамические маршруты. Проанализируем адреса курсов на Хекслете:

В этих адресах прослеживается определенная структура: /courses/<имя курса>. Можно предположить, что на каждый такой адрес создается свой маршрут и обработчик, но тогда представим процесс наполнения сайта.

При добавлении нового курса придется программировать. И хотя курсов на Хекслете не тысячи, такой процесс все равно трудоемок.

То же можно сказать и про профили пользователей — /u/<никнейм пользователя>. Причем пользователей сотни тысяч, и добавляются они на сайт непрерывно без нашего участия.

В примерах выше мы столкнулись с динамическими маршрутами. Такие маршруты имеют внутри изменяемые части, но обработчик у маршрута только один. Например, все указанные выше адреса курсов соответствуют одному маршруту, который можно записать так /courses/{id}.

Секция {id} означает, что на это место подставляется конкретный идентификатор курса — уникальная запись, отличающая одну сущность от другой.

Имя изменяемой части можно выбирать произвольно. Вместо {id} можно написать {lala}. Сам способ записи (в данном случае имя с обрамляющими {}) зависит от конкретного фреймворка. В Slim для этого используются фигурные скобки, что создает ощущение использования интерполяции:

<?php

$app->get('/courses/{id}', function ($request, $response, array $args) {
    $id = $args['id'];
    return $response->write("Course id: {$id}");
});
curl localhost:8080/courses/132

Course id: 132

Любая изменяемая часть маршрута называется плейсхолдером — заполнителем. В маршруте выше только один плейсхолдер — id. Доступ к значению конкретного плейсхолдера осуществляется по имени через массив $args, который передается третьим параметром в функцию-обработчик.

Для удобства пользователей в адресах стараются использовать не числовые идентификаторы, а человекочитаемые названия. Например, вместо /courses/332 показывают /courses/php-mvc. Эту часть адреса называют словом slug.

Slug должен быть уникален, а его формат обязан соответствовать требованиям формирования адресов. Как правило, эти имена делают, используя символы латинского алфавита с дефисом между ними: this-that-other-outre-collection.

Подведем промежуточный итог. Понятия адрес и маршрут обозначают разные вещи. Если маршрут статический, то он всегда совпадает с адресом, например, /about. Если маршрут динамический, то ему могут соответствовать бесконечное число адресов, даже если таких страниц на сайте нет, например, /courses/:id.

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

<?php

$app->get('/courses/{courseId}/lessons/{id}', function ($request, $response, array $args) {
    $courseId = $args['courseId'];
    $id = $args['id'];
    return $response->write("Course id: {$courseId}")
      ->write("Lesson id: {$id}");
});

Самостоятельная работа

  1. Добавьте в index.php обработчик из первого примера этого урока

  2. Откройте в браузере страницу /courses/5. Попробуйте поменять число

Динамический маршрут

Дополнительные материалы

  1. Официальная документация

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 28 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»