MVC taikymas PHP
Pažiūrėkime, kaip kartu taikomi visi išmokti dalykai. Tarkime, pavyzdžiui, mūsų svetainėje yra kažkokie straipsniai-puslapiai. Mes norime arba parodyti vieną straipsnį, arba parodyti visus straipsnius. Pažiūrėkime, kaip tai padaryti mūsų karkase.
Lentelė duomenų bazėje
Pirmiausia sukurkime lentelę pages
duomenų bazėje. Pridėkime ten stulpelius id,
title ir text. Užpildykime šią
lentelę kokiais nors duomenimis
per PhpMyAdmin.
Modelis
Sukurkime modelį su metodu vienam įrašui gauti ir metodu visiems įrašams gauti:
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
public function getById($id)
{
return $this->findOne("SELECT * FROM pages WHERE id=$id");
}
public function getAll()
{
return $this->findMany("SELECT id, title FROM pages");
}
}
?>
Maršrutizavimas
Sukurkime atitinkamą maršrutizavimą:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Valdiklis
Sukurkime valdiklį:
<?php
namespace Project\Controllers;
use \Core\Controller;
use \Project\Models\Page;
class PageController extends Controller
{
public function one($params)
{
$page = (new Page) -> getById($params['id']);
$this->title = $page['title'];
return $this->render('page/one', [
'text' => $page['text'],
'h1' => $this->title
]);
}
public function all()
{
$this->title = 'Visų puslapių sąrašas';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Atvaizdai
Sukurkime atvaizdą metodui one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Sukurkime atvaizdą metodui all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>nuoroda</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">nuoroda į puslapį</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktinės užduotys
Tarkime, jūsų duomenų bazėje yra produktai.
Kiekvienas produktas turi pavadinimą, kainą ir
kiekį, aprašymą. Įgyvendinkite vieno
produkto atvaizdavimą pagal id ir visų produktų atvaizdavimą panašiai,
kaip tai padaryta teorijoje.