⊗ppPmSDRt 444 of 447 menu

Định tuyến đơn giản trong engine bằng PHP

Trong bài học trước trên trang web của chúng ta chỉ có một nhóm URL. Tất nhiên, thông thường một trang web có nhiều loại địa chỉ khác nhau.

Mỗi nhóm địa chỉ sẽ được xử lý bởi một biểu thức chính quy riêng, được gọi là route. Tương ứng, quá trình ánh xạ các route và mã để xử lý chúng được gọi là routing.

Giả sử, ví dụ, chúng ta có hai loại địa chỉ. Hãy viết một route riêng cho mỗi nhóm:

<?php if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) { // một trang theo slug } if (preg_match('#^/page/all$#', $url, $params)) { // danh sách tất cả các trang } ?>

Để thuận tiện, hãy tách mã xử lý mỗi route ra một tệp riêng biệt:

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

Các tệp được include phải trả về kết quả là một mảng chứa title và content của trang.

Hãy viết mã cho tệp đầu tiên, hiển thị một trang theo slug của nó:

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

Và bây giờ hãy viết mã cho tệp thứ hai, hiển thị danh sách liên kết đến tất cả các trang:

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

Sau khi thực hiện một trong các điều kiện, trong biến $page sẽ luôn có một mảng với cùng một cấu trúc. Hãy sử dụng mảng này để chèn title và content vào template của trang web:

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

Tổng hợp tất cả lại, chúng ta có mã sau:

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

Giả sử bạn có một trang web với người dùng. Hãy tạo một trang để hiển thị một người dùng, một trang để hiển thị tất cả người dùng và một trang với biểu mẫu để thêm người dùng mới.

Tiếng Việt
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ʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối