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 पर निर्दिष्ट शहर का विवरण दिखाया जाता है।