Як визначати необовʼязкові заповнювачі
Дата оновлення перекладу 2023-06-22
Як визначати необовʼязкові заповнювачі
Щоб зробити все більш захоплюючим, додайте новий маршрут, який відображає список усіх доступних записів блогу для цього уявного додатка-блогу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// src/Controller/BlogController.php
// ...
class BlogController extends Controller
{
// ...
/**
* @Route("/blog")
*/
public function index()
{
// ...
}
}
Поки що цей маршрут настільки простий, наскільки це можливо - він не містить
заповнювачів і відповідатиме лише точному URL /blog
. Але що, якщо вам
потрібно, щоб цей маршрут підтримував нумерацію сторінок, де /blog/2
відображає
другу сторінку записів блогу? Оновіть маршрут так, щоб у ньому був новий заповнювач
{page}
:
1 2 3 4 5 6 7 8 9 10 11
// src/Controller/BlogController.php
// ...
/**
* @Route("/blog/{page}")
*/
public function index($page)
{
// ...
}
Як і в заповнювачі {slug}
раніше, значення, що відповідає {page}
буде
доступне всередині вашого контролера. Його значення може бути використано для
визначення того, який набір записів блогу потрібно відобразити для заданої сторінки.
Але почекайте-но! Оскільки заповнювачі потрібні за замовчуванням, цей маршрут більше
не буде відповідати просто /blog
. Замість цього, щоб побачити 1-шу сторінку
блогу, вам потрібно використовувати URL /blog/1
! Оскільки це неналежна поведінка для
багатого веб-додатку, змініть маршрут так, щоб параметр {page}
був необов'язковим.
Це робиться шляхом додавання його в колекцію defaults
:
1 2 3 4 5 6 7 8 9 10 11
// src/Controller/BlogController.php
// ...
/**
* @Route("/blog/{page}", defaults={"page"=1})
*/
public function index($page)
{
// ...
}
Додаючи page
до ключа defaults
, заповнювач {page}
більше не
є обов'язковим. URL /blog
буде відповідати цьому маршруту,
а значення параметра page
буде встановлено як 1
. URL /blog/2
також відповідатиме, надаючи параметру page
значення 2
.
Ідеально.
URL | ??????? | ????????? |
---|---|---|
/blog |
blog |
{page} = 1 |
/blog/1 |
blog |
{page} = 1 |
/blog/2 |
blog |
{page} = 2 |
Caution
Звичайно ж, у вас може бути більше одного необов'язкового заповнювача
(наприклад, /blog/{slug}/{page}
), але все після необов'язкового заповнювача
також має бути необов'язковим. Наприклад, /{page}/blog
- валідний шлях, але
page
завжди буде обов'язковим (тобто просто /blog
не відповідатиме
цьому маршруту).
Tip
Маршрути з необов'язковими параметрами в результаті не відповідатимуть
запитам із замикаючим слешем (тобто /blog/
не буде відповідати, а
/blog
- буде).