PHP Motorunda Basit Yönlendirme
Önceki derste sitemizde sadece bir URL grubu vardı. Tabii ki, genellikle bir sitede birkaç farklı adres türü bulunur.
Her adres grubu, kendi düzenli ifadeleriyle işlenecek, bunlara rotalar denir. Buna bağlı olarak rotaları ve onları işlemek için gereken kodu eşleştirme sürecine yönlendirme denir.
Örneğin, iki tür adresimiz olduğunu varsayalım. Her grup için kendi rotamızı yazalım:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// slug'a göre tek bir sayfa
}
if (preg_match('#^/page/all$#', $url, $params)) {
// tüm sayfaların listesi
}
?>
Kolaylık olması için her rotanın işlem kodunu ayrı bir dosyaya alalım:
<?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';
}
?>
Bağlanan dosyalar, sonuç olarak sayfanın başlığını ve içeriğini içeren bir dizi döndürmelidir.
Slug'ına göre tek bir sayfa gösteren ilk dosyanın kodunu yazalım:
<?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;
?>
Şimdi de tüm sayfalara bağlantı listesi gösteren ikinci dosyanın kodunu yazalım:
<?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' => 'tüm sayfalar',
'content' => $content
];
return $page;
?>
Koşullardan birinin çalışmasından sonra
$page değişkeninde her zaman aynı
yapıda bir dizi olacaktır. Bu diziyi kullanarak
site şablonuna başlık ve içerik ekleyelim:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Hepsini bir araya getirip aşağıdaki kodu elde edelim:
<?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;
?>
Kullanıcıların olduğu bir siteniz olduğunu varsayalım. Bir kullanıcıyı göstermek için bir sayfa, tüm kullanıcıları listelemek için bir sayfa ve yeni kullanıcı eklemek için form içeren bir sayfa yapın.