PHP အင်ဂျင်တွင် ရိုးရှင်းသော လမ်းကြောင်းရှာခြင်း

ယခင်သင်ခန်းစာတွင် ကျွန်ုပ်တို့၏ ဝဘ်ဆိုဒ်တွင် URL တစ်မျိုးတည်းသာ ရှိခဲ့သည်။ သေချာသည်မှာ သာမန်အားဖြင့် ဝဘ်ဆိုဒ်တွင် လိပ်စာအမျိုးအစားအများအပြား ရှိတတ်ပါသည်။

လိပ်စာအမျိုးအစားတစ်ခုစီကို ၎င်း၏ကိုယ်ပိုင် ရေဂူလာအသုံးအနှုန်းဖြင့် ကိုင်တွယ်ဖြေရှင်းမည်ဖြစ်ပြီး ၎င်းတို့ကို routes ဟုခေါ်သည်။ ထို့ကြောင့် routes များနှင့် ၎င်းတို့ကိုကိုင်တွယ်ဖြေရှင်းရန် ကုဒ်များကို တွဲဖက်ခြင်း ဖြစ်စဉ်ကို routing ဟုခေါ်သည်။

ဥပမာအားဖြင့် ကျွန်ုပ်တို့တွင် လိပ်စာအမျိုးအစားနှစ်မျိုး ရှိသည်ဆိုကြပါစို့။ အုပ်စုတစ်ခုစီအတွက် ၎င်း၏ကိုယ်ပိုင် route ကို ရေးကြည့်ကြပါစို့။

index.php<?php
  if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
    // slug တစ်ခုဖြင့် တစ်ခုတည်းသော စာမျက်နှာ
  }
  
  if (preg_match('#^/page/all$#', $url, $params)) {
    // စာမျက်နှာအားလုံး၏ စာရင်း
  }
?>

အဆင်ပြေစေရန် route တစ်ခုစီ၏ ကိုင်တွယ်ဖြေရှင်းမှုကုဒ်ကို သီးခြားဖိုင်တစ်ခုထဲသို့ ထုတ်ယူထားကြပါစို့။

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

ထည့်သွင်းမည့်ဖိုင်များသည် ၎င်းတို့၏ရလဒ်အဖြစ် စာမျက်နှာ၏ခေါင်းစဉ်နှင့် အနှစ်အချုပ်ပါသော array တစ်ခုကို ပြန်ပေးရပါမည်။

သူ၏ slug အရ တစ်ခုတည်းသော စာမျက်နှာကို ပြသသည့် ပထမဖိုင်၏ကုဒ်ကို ရေးကြည့်ကြပါစို့။

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' => 'စာမျက်နှာအားလုံး',
    'content' => $content
  ];
  
  return $page;
?>

အခြေအနေတစ်ခုခုပြီးဆုံးပါက variable $page ထဲတွင် တစ်ခုတည်းသော ဖွဲ့စည်းပုံမှ array တစ်ခု အမြဲရှိနေပါမည်။ ဝဘ်ဆိုဒ် template ထဲသို့ ခေါင်းစဉ်နှင့် အနှစ်အချုပ်ကို အစားထိုးရန် ဤ array ကို အသုံးပြုကြပါစို့။

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

သင့်တွင် အသုံးပြုသူများပါသော ဝဘ်ဆိုဒ်တစ်ခု ရှိသည်ဆိုပါစို့။ အသုံးပြုသူတစ်ဦးကို ပြသရန် စာမျက်နှာ၊ အသုံးပြုသူအားလုံးကို ပြသရန် စာမျက်နှာနှင့် အသုံးပြုသူအသစ်ထည့်ရန် ဖောင်ပါသော စာမျက်နှာကို ပြုလုပ်ပါ။