PHP इंजन में सरल रूटिंग

पिछले पाठ में हमारी वेबसाइट पर केवल एक ही प्रकार के URL थे। निस्संदेह, आमतौर पर वेबसाइट पर कई प्रकार के पते होते हैं।

पते के प्रत्येक समूह को उसके अपने नियमित अभिव्यक्ति द्वारा संसाधित किया जाएगा, जिन्हें रूट्स कहा जाता है। तदनुसार रूट्स और उनके प्रसंस्करण के लिए कोड का मिलान करने की प्रक्रिया को रूटिंग कहा जाता है।

मान लीजिए, उदाहरण के लिए, हमारे पास दो प्रकार के पते हैं। आइए प्रत्येक समूह के लिए अपना रूट लिखें:

index.php<?php
  if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
    // स्लग के आधार पर एक पृष्ठ
  }
  
  if (preg_match('#^/page/all$#', $url, $params)) {
    // सभी पृष्ठों की सूची
  }
?>

सुविधा के लिए, प्रत्येक रूट के प्रसंस्करण कोड को एक अलग फ़ाइल में लिखते हैं:

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

शामिल की जाने वाली फ़ाइलों को अपने परिणाम के रूप में पृष्ठ के शीर्षक और सामग्री वाली एक सरणी वापस करनी चाहिए।

आइए पहली फ़ाइल का कोड लिखें, जो उसके स्लग के आधार पर एक पृष्ठ दिखाती है:

view/page/show.php<?php
  $slug   = $params[1];
  $query  = "SELECT * FROM pages WHERE slug='$slug'";
  
  $res = mysqli_query($link, $query) or die(mysqli_error($link));
  $page   = mysqli_fetch_assoc($res);
  
  return $page;
?>

और अब दूसरी फ़ाइल का कोड लिखें, जो सभी पृष्ठों की लिंक की सूची दिखाती है:

view/page/all.php<?php
  $query = "SELECT slug, title FROM pages";
  $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/'  . $page['slug'] . '">' . $page['title'] . '</a>
      </div>
    ';
  }
  
  $page = [
    'title' => 'all pages',
    'content' => $content
  ];
  
  return $page;
?>

एक शर्त पूरी होने के बाद चर $page में हमेशा एक संरचना वाली सरणी होगी। साइट टेम्पलेट में शीर्षक और सामग्री डालने के लिए इस सरणी का उपयोग करते हैं:

index.php<?php
  $layout = file_get_contents('layout.php');
  $layout = str_replace('{{ title }}', $page['title'], $layout);
  $layout = str_replace('{{ content }}', $page['content'], $layout);
  
  echo $layout;
?>

सब कुछ एक साथ रखें और निम्नलिखित कोड प्राप्त करें:

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
  
  if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
    $page = include 'view/page/show.php';
  }
  
  if (preg_match('#^/page/all$#', $url, $params)) {
    $page = include 'view/page/all.php';
  }
  
  $layout = file_get_contents('layout.php');
  $layout = str_replace('{{ title }}', $page['title'], $layout);
  $layout = str_replace('{{ content }}', $page['content'], $layout);
  
  echo $layout;
?>
Задание 1

मान लीजिए आपके पास उपयोगकर्ताओं वाली एक वेबसाइट है। एक उपयोगकर्ता को दिखाने के लिए एक पृष्ठ बनाएं, सभी उपयोगकर्ताओं को दिखाने के लिए एक पृष्ठ बनाएं और एक नया उपयोगकर्ता जोड़ने के लिए फॉर्म वाला एक पृष्ठ बनाएं।