HTML Diff
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/&lt;имя курса&gt;</em>. Можно предположить, что на каждый такой адрес создается свой маршрут и обработчик, но тогда представим процесс наполнения сайта.</p>
6 </ul><p>В этих адресах прослеживается определенная структура:<em>/courses/&lt;имя курса&gt;</em>. Можно предположить, что на каждый такой адрес создается свой маршрут и обработчик, но тогда представим процесс наполнения сайта.</p>
7 <p>При добавлении нового курса придется программировать. И хотя курсов на Хекслете не тысячи, такой процесс все равно трудоемок.</p>
7 <p>При добавлении нового курса придется программировать. И хотя курсов на Хекслете не тысячи, такой процесс все равно трудоемок.</p>
8 <p>То же можно сказать и про профили пользователей -<em>/u/&lt;никнейм пользователя&gt;</em>. Причем пользователей сотни тысяч, и добавляются они на сайт непрерывно без нашего участия.</p>
8 <p>То же можно сказать и про профили пользователей -<em>/u/&lt;никнейм пользователя&gt;</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