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' => 'ҳамаи саҳифаҳо',
    '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

Фарз кунем, ки шмо сомонае бо корбарон доред. Саҳифаеро барои намоиши як корбар, саҳифаеро барои чопи ҳамаи корбарон ва саҳифае бо шакл барои илова кардани корбари нав созед.