⊗ppPmSDRt 444 of 447 menu

Прост маршрутизатор в двигател на PHP

В предишния урок на нашия сайт имаше само една група URL адреси. Разбира се, обикновено на сайта има няколко типа адреси.

Всяка група адреси ще бъде обработвана от собствено регулярно изражение, които се наричат маршрути. Съответно процесът на съпоставяне на маршрути и код за тяхната обработка се нарича маршрутизация.

Да предположим, че имаме два типа адреси. Нека за всяка група напишем собствен маршрут:

<?php if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) { // една страница по слъг } if (preg_match('#^/page/all$#', $url, $params)) { // списък на всички страници } ?>

За удобство ще изнесем кодът за обработка на всеки маршрут в отделен файл:

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

Включваните файлове трябва да връщат като резултат масив със заглавие и съдържание на страницата.

Нека напишем кода на първия файл, който извежда една страница по нейния слъг:

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

А сега нека напишем кода на втория файл, който извежда списък с връзки към всички страници:

<?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 винаги ще има масив от една структура. Ще използваме този масив, за да поставим заглавието и съдържанието в шаблона на сайта:

<?php $layout = file_get_contents('layout.php'); $layout = str_replace('{{ title }}', $page['title'], $layout); $layout = str_replace('{{ content }}', $page['content'], $layout); echo $layout; ?>

Нека съберем всичко заедно и получим следния код:

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

Да предположим, че имате сайт с потребители. Направете страница за показване на един потребител, страница за извеждане на всички потребители и страница с форма за добавяне на нов потребител.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне