⊗ppPmSDRt 444 of 447 menu

Roteamento simples em um motor em PHP

Na lição anterior, nosso site tinha apenas um grupo de URLs. Claro, geralmente um site tem vários tipos de endereços.

Cada grupo de endereços será processado por sua própria expressão regular, que são chamadas rotas. Consequentemente, o processo de correspondência de rotas e código para processá-las é chamado de roteamento.

Suponha, por exemplo, que temos dois tipos de endereços. Vamos escrever nossa própria rota para cada grupo:

<?php if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) { // uma página por slug } if (preg_match('#^/page/all$#', $url, $params)) { // lista de todas as páginas } ?>

Para conveniência, vamos colocar o código de processamento de cada rota em um arquivo separado:

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

Os arquivos incluídos devem retornar, como resultado, um array com o título e o conteúdo da página.

Vamos escrever o código do primeiro arquivo, que exibe uma única página pelo seu slug:

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

E agora vamos escrever o código do segundo arquivo, que exibe a lista de links para todas as páginas:

<?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' => 'todas as páginas', 'content' => $content ]; return $page; ?>

Após a execução de uma das condições, a variável $page sempre será um array com uma estrutura. Vamos usar este array para substituir o título e o conteúdo no template do site:

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

Vamos juntar tudo e obter o seguinte código:

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

Suponha que você tem um site com usuários. Crie uma página para mostrar um usuário, uma página para listar todos os usuários e uma página com um formulário para adicionar um novo usuário.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar