Meerdere parameters in route van de engine in PHP

Stel dat we nu categorieën op onze website hebben en pagina's die tot deze categorieën behoren. Laten we een tabel met categorieën maken:

categories
id slug name
1 first-category name1
2 second-category name2

En een tabel met pagina's:

pages
id slug title content category_id
1 my-first-page title1 <div> content1 </div> 1
2 my-second-page title2 <div> content2 </div> 1
3 my-third-page title3 <div> content3 </div> 2

Op onze website staan we toe dat slugs van pagina's uit verschillende categorieën overeenkomen. Dit betekent dat we in de URL eerst de slug van de categorie moeten specificeren, en dan de slug van de pagina volgens dit schema: /page/:category/:page, waar de dubbele punten de plaatsen aangeven waar de veranderende parameters zullen staan.

Laten we routes voor onze website schrijven:

php<?php
  $route = '^/page/(?<catSlug>[a-z0-9_-]+)/(?<pageSlug>[a-z0-9_-]+)
;
  if (preg_match("#$route#", $url, $params)) {
    $page = include 'view/page/show.php';
  }
  
  $route = '^/page/(?<catSlug>[a-z0-9_-]+)
;
  if (preg_match("#$route#", $url, $params)) {
    $page = include 'view/page/category.php';
  }
  
  $route = '^/
;
  if (preg_match("#$route#", $url, $params)) {
    $page = include 'view/page/all.php';
  }
?>

In de handler van de eerste route zullen we de gevraagde pagina tonen:

view/page/show.php<?php
  $catSlug = $params['catSlug'];
  $pageSlug = $params['pageSlug'];
  
  $query = "SELECT pages.title, pages.content 
    FROM pages
  LEFT JOIN
    category ON category.id=pages.category_id
  WHERE
    pages.slug='$pageSlug' AND category.slug='$catSlug'";
  
  $res = mysqli_query($link, $query) or die(mysqli_error($link));
  $page = mysqli_fetch_assoc($res);
  
  return $page;
?>

In de handler van de tweede route zullen we de lijst met pagina's uit de opgegeven categorie tonen:

view/page/category.php<?php
  $catSlug = $params['catSlug'];
  
  $query = "SELECT pages.slug, pages.title FROM pages
  LEFT JOIN
    category ON category.id=pages.category_id
  WHERE
    category.slug='$catSlug'";
  
  $res = mysqli_query($link, $query) or die(mysqli_error($link));
  
  for ($data = []; $row = mysqli_fetch_assoc($res); $data[] = $row);
  
  $content = '';
  foreach ($data as $page) {
    $content .= '
      <div>
        <a href="/page/' . $catSlug . '/'  . $page['slug'] . '">' . $page['title'] . '</a>
      </div>
    ';
  }
  
  $page = [
    'title' => 'lijst van alle pagina\'s in categorie ' . $catSlug,
    'content' => $content
  ];
  
  return $page;
?>
Задание 1

Stel dat je een website hebt met steden en landen. Laat op adres / de lijst van alle landen zien, op adres /:country de lijst met steden van het in de parameter opgegeven land, en op adres /:country/:city de beschrijving van de opgegeven stad.