Áp dụng MVC trong PHP
Hãy cùng xem xét việc áp dụng tổng hợp tất cả kiến thức đã học. Giả sử, ví dụ, trên website của chúng ta có một số trang bài viết. Chúng ta muốn hiển thị một bài viết, hoặc hiển thị tất cả các bài viết. Hãy cùng xem xét cách thực hiện điều này trong framework của chúng ta.
Bảng trong CSDL
Đầu tiên hãy tạo bảng pages
trong cơ sở dữ liệu. Thêm vào đó các cột id,
title và text. Điền dữ liệu vào
bảng này bằng một số dữ liệu bất kỳ
thông qua PhpMyAdmin.
Model
Tạo một model với phương thức để lấy một bản ghi và phương thức để lấy tất cả các bản ghi:
<?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");
}
}
?>
Routing
Tạo routing tương ứng:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Tạo controller:
<?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 = 'Danh sách tất cả các trang';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
View
Tạo view cho phương thức one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Tạo view cho phương thức all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>liên kết</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">liên kết tới trang</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Bài tập thực hành
Giả sử trong cơ sở dữ liệu của bạn có các sản phẩm.
Mỗi sản phẩm chứa tên, giá,
số lượng, mô tả. Hãy triển khai chức năng hiển thị một
sản phẩm theo id và tất cả sản phẩm tương tự
như đã làm trong phần lý thuyết.