Preprosto usmerjanje v pogonskem programu v PHP

V prejšnji lekciji je bilo na naši spletni strani le eno skupino URL-jev. Seveda ima spletna stran običajno več vrst naslovov.

Vsako skupino naslovov bo obdelalo svoje regularno izražanje, ki se imenujejo usmerjevalniki. V skladu s tem se proces ujemanja usmerjevalnikov in kode za njihovo obdelavo imenuje usmerjanje.

Recimo, da imamo na primer dve vrsti naslovov. Za vsako skupino napišimo svoj usmerjevalnik:

index.php<?php
  if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
    // ena stran po sledu
  }
  
  if (preg_match('#^/page/all$#', $url, $params)) {
    // seznam vseh strani
  }
?>

Za udobje izločimo kodo obdelave vsakega usmerjevalnika v ločeno datoteko:

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

Vključene datoteke morajo svoj rezultat vrniti kot matriko z naslovom in vsebino strani.

Napišimo kodo prve datoteke, ki prikaže eno stran po njenem sledu:

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

In sedaj napišimo kodo druge datoteke, ki prikaže seznam povezav na vse strani:

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

Po izvedbi enega od pogojev bo v spremenljivki $page vedno matrika iz ene strukture. Uporabimo to matriko, da vstavimo naslov in vsebino v predlogo spletne strani:

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

Vse skupaj sestavimo in dobimo naslednjo kodo:

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

Recimo, da imate spletno stran z uporabniki. Naredite stran za prikaz enega uporabnika, stran za prikaz vseh uporabnikov in stran z obrazcem za dodajanje novega uporabnika.