Áp dụng tham số trong route trong MVC bằng PHP
Hãy xem xét việc áp dụng những gì đã mô tả vào
một ví dụ thực tế hơn. Giả sử controller
PageController của chúng ta chứa một mảng các trang
(dữ liệu này lẽ ra phải được model cung cấp, nhưng chúng ta
chưa tìm hiểu về model, vì vậy hãy để
dữ liệu tạm thời chỉ được lưu trữ trong controller):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
}
?>
Hãy tạo một action show,
sẽ hiển thị một trang với
số cụ thể (id):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
public function show()
{
// tại đây chúng ta sẽ hiển thị trang với số cụ thể
}
}
?>
Giả sử khi truy cập địa chỉ /page/1/
sẽ hiển thị văn bản của trang đầu tiên, khi
truy cập địa chỉ /page/2/ -
văn bản của trang thứ hai, v.v. Hãy tạo
route tương ứng:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Hãy triển khai phương thức show đã mô tả:
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
public function show($params)
{
echo $this->pages[ $params['id'] ]; // hiển thị trang theo số
}
}
?>
Hãy triển khai controller UserController,
chứa mảng sau:
<?php
$this->users = [
1 => ['name'=>'user1', 'age'=>'23', 'salary' => 1000],
2 => ['name'=>'user2', 'age'=>'24', 'salary' => 2000],
3 => ['name'=>'user3', 'age'=>'25', 'salary' => 3000],
4 => ['name'=>'user4', 'age'=>'26', 'salary' => 4000],
5 => ['name'=>'user5', 'age'=>'27', 'salary' => 5000],
];
?>
Trong controller UserController, hãy tạo
action show, sẽ hiển thị
người dùng theo id cụ thể. Hãy để nó
có thể truy cập được qua địa chỉ dạng sau:
/user/:id/.
Trong controller UserController, hãy tạo
action info, sẽ hiển thị
tên hoặc tuổi của người dùng được chỉ định. Hãy để
action này có thể truy cập được qua địa chỉ dạng
sau: /user/:id/:key/, trong đó key
sẽ có giá trị 'name', 'age'
hoặc 'salary'.
Trong controller UserController, hãy tạo
action all, sẽ hiển thị
danh sách tất cả người dùng lên màn hình. Hãy để action này
có thể truy cập được qua địa chỉ dạng sau:
/user/all/ (ở đây sẽ không có
tham số nào).
Trong controller UserController, hãy tạo
action first, sẽ hiển thị
danh sách N người dùng đầu tiên lên màn hình. Hãy để
action này có thể truy cập được qua địa chỉ dạng sau: /user/first/:n/, trong đó tham số
sẽ là số lượng người dùng cần
hiển thị lên màn hình.