Uelekezaji Rahisi katika Injini ya PHP

Katika somo lililopita kwenye tovuti yetu kulikuwa na kundi moja tu ya anwani. Bila shaka, kawaida kwenye tovuti kuna aina kadhaa za anwani.

Kila kundi la anwani litashughulikiwa na usemi wa kawaida wake, ambao huitwa njia. Ipasavyo mchakato wa kulinganisha njia na msimbo wa kuzishughulikia huitwa uelekezaji.

Wacha tuseme, kwa mfano, tuna aina mbili za anwani. Wacha kwa kila kundi tuandike njia yake:

index.php<?php
  if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
    // ukurasa mmoja kwa slug
  }
  
  if (preg_match('#^/page/all$#', $url, $params)) {
    // orodha ya kurasa zote
  }
?>

Kwa urahisi, wacha tuondoe msimbo wa usindikaji wa kila njia kwenye faili tofauti:

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

Kwa matokeo yake, faili zinazojumuishwa zinapaswa kurejesha safu yenye kichwa na yaliyomo kwenye ukurasa.

Wacha tuandike msimbo wa faili la kwanza, linaloonyesha ukurasa mmoja kulingana na slug yake:

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

Sasa tuandike msimbo wa faili la pili, linaloonyesha orodha ya viungo kwa kurasa zote:

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' => 'kurasa zote',
    'content' => $content
  ];
  
  return $page;
?>

Baada ya kutekeleza moja ya masharti kwenye kutofautisha $page kutakuwa na safu kutoka kwa muundo mmoja daima. Tutumie safu hii ili kuweka kichwa na yaliyomo kwenye kiolezo cha tovuti:

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

Wacha tukusanye pamoja na tupate msimbo ufuatao:

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

Wacha tuseme una tovuti yenye watumiaji. Fanya ukurasa wa kuonyesha mtumiaji mmoja, ukurasa wa kuonyesha watumiaji wote na ukurasa wenye fomu ya kuongeza mtumiaji mpya.