Aplicarea MVC în PHP
Să analizăm aplicarea în comun a tuturor cunoștințelor învățate. Să presupunem, de exemplu, că pe site-ul nostru există niște articole-pagini. Noi vrem fie să afișăm un articol, fie să afișăm toate articolele. Să analizăm cum putem face acest lucru în framework-ul nostru.
Tabel în baza de date
Pentru început, să creăm tabelul pages
în baza de date. Să adăugăm coloanele id,
title și text. Să completăm acest
tabel cu niște date
prin PhpMyAdmin.
Model
Să creăm un model cu o metodă pentru obținerea unei înregistrări și o metodă pentru obținerea tuturor înregistrărilor:
<?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");
}
}
?>
Rutare
Să creăm rutele corespunzătoare:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Să creăm controller-ul:
<?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 = 'Lista tuturor paginilor';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Vizualizări
Să creăm vizualizarea pentru metoda one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Să creăm vizualizarea pentru metoda 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 către pagină</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Sarcini practice
Să presupunem că în baza de date aveți produse.
Fiecare produs conține denumirea, prețul,
cantitatea și descrierea. Implementați afișarea unui
produs după id și a tuturor produselor similar
cu cum este făcut în teorie.