Vigezo vingi katika njia za injini ya PHP

Acha sasa kwenye tovuti yetu kuna kategoria na kurasa, zinazomilikiwa na kategoria hizi. Wacha tufanye jedwali lenye kategoria:

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

Na jedwali lenye kurasa:

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

Kwenye tovuti yetu tunaruhusu, kwamba slugs za kurasa kutoka kategoria tofauti ziwe sawa. Hii inamaanisha kuwa kwenye URL tunapaswa kueleza kwanza slug ya kategoria, kisha slug ya ukurasa kwa mpango huu: /page/:category/:page, ambapo kupitia koloni zimeonyeshwa maeneo, ambayo vitabiriwa vinabadilika.

Wacha tuandike njia za tovuti yetu:

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';
  }
?>

Kwenye kishughulizi cha njia ya kwanza tutaonyesha ukurasa ulioombwa:

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;
?>

Kwenye kishughulizi cha njia ya pili tutaonyesha orodha ya kurasa kutoka kategoria maalum:

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' => 'orodha ya kurasa zote za kategoria ' . $catSlug,
    'content' => $content
  ];
  
  return $page;
?>
Задание 1

Acha kwenye tovuti yako kuna miji na nchi. Acha kwa anwani / inatolewa orodha ya nchi zote, kwa anwani /:country inachapishwa orodha ya miji ya nchi maalum kwenye kigezo cha nchi, na kwa anwani /:country/:city maelezo ya jiji maalum.