MVC rakendamine PHP-s
Vaatame kõigi õpitud asjade kooskasutamist. Oletame näiteks, et meie veebisaidil on mõned artiklid-leheküljed. Me tahame kas näidata ühte artiklit või näidata kõiki artikleid. Vaatame, kuidas seda teha meie raamistikus.
Tabel andmebaasis
Alustuseks loome tabeli pages
andmebaasi. Lisame sinna veerud id,
title ja text. Täidame selle
tabeli mõne andmega
läbi PhpMyAdmini.
Mudel
Teeme mudeli, millel on meetod ühe kirje saamiseks ja meetod kõigi kirjete saamiseks:
<?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");
}
}
?>
Marsruutimine
Teeme vastava marsruutimise:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Kontroller
Teeme kontrolleri:
<?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 = 'Kõikide lehtede nimekiri';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Vaated
Teeme vaate meetodile one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Teeme vaate meetodile all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>link</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">link lehele</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktilised ülesanded
Oletame, et teie andmebaasis on tooted.
Iga toode sisaldab nimetust, hinda ja
kogust, kirjeldust. Rakendage ühe
toode kuvamine id järgi ja kõikide toodete kuvamine sarnaselt
teoorias tehtule.