0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>До сих пор мы встречались только со статическими маршрутами. В них нет изменяемых частей - адрес точно совпадает с маршрутом и не меняется, поэтому и называется статическим.</p>
1
<p>До сих пор мы встречались только со статическими маршрутами. В них нет изменяемых частей - адрес точно совпадает с маршрутом и не меняется, поэтому и называется статическим.</p>
2
<p>На практике чаще встречаются динамические маршруты. Проанализируем адреса курсов на Хекслете:</p>
2
<p>На практике чаще встречаются динамические маршруты. Проанализируем адреса курсов на Хекслете:</p>
3
<ul><li><a>https://ru.hexlet.io/courses/php-introduction-to-oop</a></li>
3
<ul><li><a>https://ru.hexlet.io/courses/php-introduction-to-oop</a></li>
4
<li><a>https://ru.hexlet.io/courses/php-object-oriented-design</a></li>
4
<li><a>https://ru.hexlet.io/courses/php-object-oriented-design</a></li>
5
<li><a>https://ru.hexlet.io/courses/js-react</a></li>
5
<li><a>https://ru.hexlet.io/courses/js-react</a></li>
6
</ul><p>В этих адресах прослеживается определенная структура:<em>/courses/<имя курса></em>. Можно предположить, что на каждый такой адрес создается свой маршрут и обработчик, но тогда представим процесс наполнения сайта.</p>
6
</ul><p>В этих адресах прослеживается определенная структура:<em>/courses/<имя курса></em>. Можно предположить, что на каждый такой адрес создается свой маршрут и обработчик, но тогда представим процесс наполнения сайта.</p>
7
<p>При добавлении нового курса придется программировать. И хотя курсов на Хекслете не тысячи, такой процесс все равно трудоемок.</p>
7
<p>При добавлении нового курса придется программировать. И хотя курсов на Хекслете не тысячи, такой процесс все равно трудоемок.</p>
8
<p>То же можно сказать и про профили пользователей -<em>/u/<никнейм пользователя></em>. Причем пользователей сотни тысяч, и добавляются они на сайт непрерывно без нашего участия.</p>
8
<p>То же можно сказать и про профили пользователей -<em>/u/<никнейм пользователя></em>. Причем пользователей сотни тысяч, и добавляются они на сайт непрерывно без нашего участия.</p>
9
<p>В примерах выше мы столкнулись с динамическими маршрутами. Такие маршруты имеют внутри изменяемые части, но обработчик у маршрута только один. Например, все указанные выше адреса курсов соответствуют одному маршруту, который можно записать так /courses/{id}.</p>
9
<p>В примерах выше мы столкнулись с динамическими маршрутами. Такие маршруты имеют внутри изменяемые части, но обработчик у маршрута только один. Например, все указанные выше адреса курсов соответствуют одному маршруту, который можно записать так /courses/{id}.</p>
10
<p>Секция {id} означает, что на это место подставляется конкретный идентификатор курса - уникальная запись, отличающая одну сущность от другой.</p>
10
<p>Секция {id} означает, что на это место подставляется конкретный идентификатор курса - уникальная запись, отличающая одну сущность от другой.</p>
11
<p>Имя изменяемой части можно выбирать произвольно. Вместо {id} можно написать {lala}. Сам способ записи (в данном случае имя с обрамляющими {}) зависит от конкретного фреймворка. В Slim для этого используются фигурные скобки, что создает ощущение использования интерполяции:</p>
11
<p>Имя изменяемой части можно выбирать произвольно. Вместо {id} можно написать {lala}. Сам способ записи (в данном случае имя с обрамляющими {}) зависит от конкретного фреймворка. В Slim для этого используются фигурные скобки, что создает ощущение использования интерполяции:</p>
12
<p>Любая изменяемая часть маршрута называется<strong>плейсхолдером</strong>- заполнителем. В маршруте выше только один плейсхолдер - id. Доступ к значению конкретного плейсхолдера осуществляется по имени через массив $args, который передается третьим параметром в функцию-обработчик.</p>
12
<p>Любая изменяемая часть маршрута называется<strong>плейсхолдером</strong>- заполнителем. В маршруте выше только один плейсхолдер - id. Доступ к значению конкретного плейсхолдера осуществляется по имени через массив $args, который передается третьим параметром в функцию-обработчик.</p>
13
<p>Для удобства пользователей в адресах стараются использовать не числовые идентификаторы, а человекочитаемые названия. Например, вместо<em>/courses/332</em>показывают<em>/courses/php-mvc</em>. Эту часть адреса называют словом<a>slug</a>.</p>
13
<p>Для удобства пользователей в адресах стараются использовать не числовые идентификаторы, а человекочитаемые названия. Например, вместо<em>/courses/332</em>показывают<em>/courses/php-mvc</em>. Эту часть адреса называют словом<a>slug</a>.</p>
14
<p>Slug должен быть уникален, а его формат обязан соответствовать требованиям формирования адресов. Как правило, эти имена делают, используя символы латинского алфавита с дефисом между ними:<em>this-that-other-outre-collection</em>.</p>
14
<p>Slug должен быть уникален, а его формат обязан соответствовать требованиям формирования адресов. Как правило, эти имена делают, используя символы латинского алфавита с дефисом между ними:<em>this-that-other-outre-collection</em>.</p>
15
<p>Подведем промежуточный итог. Понятия адрес и маршрут обозначают разные вещи. Если маршрут статический, то он всегда совпадает с адресом, например,<em>/about</em>. Если маршрут динамический, то ему могут соответствовать бесконечное число адресов, даже если таких страниц на сайте нет, например,<em>/courses/</em></p>
15
<p>Подведем промежуточный итог. Понятия адрес и маршрут обозначают разные вещи. Если маршрут статический, то он всегда совпадает с адресом, например,<em>/about</em>. Если маршрут динамический, то ему могут соответствовать бесконечное число адресов, даже если таких страниц на сайте нет, например,<em>/courses/</em></p>
16
<p>.</p>
16
<p>.</p>
17
<p>Количество плейсхолдеров в маршруте может быть больше одного. Обычно такие маршруты используются для вложенных ресурсов.</p>
17
<p>Количество плейсхолдеров в маршруте может быть больше одного. Обычно такие маршруты используются для вложенных ресурсов.</p>
18
18