НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
⊗ppPmSDRt 444 of 447 menu

Простой роутинг в движке в PHP

В предыдущем уроке на нашем сайте была только одна группа урлов. Конечно же, обычно на сайте бывает несколько типов адресов.

Каждая группа адресов будет обрабатываться своим регулярным выражением, которые называются роутами. Соответственно процесс сопоставления роутов и кода для их обработки называется роутингом.

Пусть, к примеру, у нас есть два типа адресов. Давайте для каждой группы напишем свой роут:

<?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' => 'all pages', '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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить