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

ඔබට පරිශීලකයින් සහිත වෙබ් අඩවියක් ඇතැයි සිතමු. තනි පරිශීලකයෙකු පෙන්වීම සඳහා පිටුවක්, සියලුම පරිශීලකයින් පෙන්වීම සඳහා පිටුවක් සහ නව පරිශීලකයෙකු එකතු කිරීම සඳහා පෝරමයක් සහිත පිටුවක් සාදන්න.