PHP එන්ජිමේ මාර්ගවල පරාමිති කිහිපයක්

අපගේ වෙබ් අඩවියේ දැන් කාණ්ඩ ඇතැයි සිතමු සහ මෙම කාණ්ඩවලට අයත් පිටු. කාණ්ඩ සමඟ වගුවක් සාදමු:

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

සහ පිටු සමඟ වගුව:

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

අපගේ වෙබ් අඩවියේ අපි විවිධ කාණ්ඩවල සිට පිටු ස්ලග් එකිනෙකා සමඟ ගැලපීමට ඉඩ දෙමු. මෙය අදහස් කරන්නේ URL හි අපි මුලින්ම සඳහන් කළ යුතු බවයි කාණ්ඩයේ ස්ලග්, ඉන්පසු පිටුවේ ස්ලග් මේ ආකාරයට යෝජනා ක්‍රමය: /page/:category/:page, කොලන් මගින් ස්ථාන සඳහන් කර ඇති තැන වෙනස් වන පරාමිති වේ.

අපගේ වෙබ් අඩවිය සඳහා මාර්ග ලියමු:

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

පළමු මාර්ගයේ හැසිරවීමේදී අපි පෙන්වන්නෙමු ඉල්ලූ පිටුව:

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

දෙවන මාර්ගයේ හැසිරවීමේදී අපි පෙන්වන්නෙමු සඳහන් කළ කාණ්ඩයෙන් පිටු ලැයිස්තුව:

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' => 'කාණ්ඩයේ සියලුම පිටු ලැයිස්තුව ' . $catSlug,
    'content' => $content
  ];
  
  return $page;
?>
Задание 1

ඔබට නගර සහ රටවල් සහිත වෙබ් අඩවියක් ඇතැයි සිතමු. ලිපිනයේ යැයි සිතමු / සියලුම රටවල ලැයිස්තුවක් පෙන්වයි ලිපිනයේ යැයි සිතමු /:country පරාමිතියේ සඳහන් කර ඇති රටේ නගර ලැයිස්තුවක් පෙන්වයි රට, සහ ලිපිනයේ යැයි සිතමු /:country/:city සඳහන් කළ නගරයේ විස්තරය.