Изучение синтаксиса шаблона маршрута¶
Помимо основных элементов — литералов и сегментов параметров, шаблоны маршрутов имеют дополнительные функции, дающие дополнительный контроль над URL-адресами приложения.
Использование дополнительных значений и значений по умолчанию¶
Рассмотрим пример.
Здесь:
{category} — обязательный параметр, {name} имеет значение по умолчанию — all, а {id} — необязательный параметр.Рассмотрим возможные URL-адреса, соответствующие этому шаблону и соответствующие значения маршрута.
| URL-адрес | Значения маршрута |
|---|---|
/product/shoes/formal/3 |
category=shoes, name=formal, id=3 |
/product/shoes/formal |
category=shoes, name=formal |
/product/shoes |
category=shoes, name=all |
/product/bags/satchels |
category=bags, name=satchels |
/product/phones |
category=phones, name=all |
/product/computers/laptops/ABC-123 |
category=computers, name=laptops, id=ABC-123 |
Важно!
Значение необязательного параметра можно указывать только в конце шаблона.
Добавление дополнительных ограничений к параметрам маршрута¶
В шаблоне можно указать дополнительные ограничения на значения параметра для того, чтобы только значения, соответствующие этим ограничениям, делали адрес совпадающим с шаблоном.
Вот они в таблице:
| Ограничение | Пример | Примеры совпадений | Описание |
|---|---|---|---|
int |
{qty:int} |
123, -123, 0 | Соответствует любому целому числу |
guid |
{id:guid} |
37b0b5c5-694c-4add-837d-92711d98fd60 |
Соответствует любому Guid |
decimal |
{cost:decimal} |
29.99, 52, -1.01 | Соответствует любому десятичному числу |
min(value) |
{age:min(18)} |
18, 20 | Соответствует целым значениям от 18 и выше |
length(value) |
{name:length(6)} |
andrew, 123456 | Соответствует строкам длиной 6 символов |
optional int |
{qty:int?} |
123, -123, 0, null | Cоответствует любому целому числу или отсутствует |
optional int max(value) |
{qty:int:max(10)?} |
3, -123, 0, null | Соответствует любому целому меньше 10 или отсутствует |
Если при сопоставлении URL-адреса с шаблоном какие-либо из указанных условий не выполняются — шаблон не считается совпадающим.
Сопоставление произвольных URL-адресов с помощью универсального параметра¶
Для ситуации, когда мы не знаем заранее, сколько сегментов должно быть в адресе, либо, когда в параметре должен присутствовать разделитель /, необходимо использовать универсальный параметр, который объявляется при помощи одной или двух звёздочек внутри параметра, то есть {*others} или {**others}. Такой параметр можно использовать только в конце шаблона, так как он захватит все сегменты до конца. Разница между одной и двумя звездочками — в поведении при генерации URL-адреса: адрес с одной звездочкой кодирует косую черту, с двумя — нет.1
Дата создания : 22 сентября 2022 г.