Á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):

project/controllers/PageController.php<?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):

project/controllers/PageController.php<?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:

/project/config/routes.php<?php
  use \Core\Route;
  
  return [
    new Route('/page/:id/', 'page', 'show'),
  ];
?>

Hãy triển khai phương thức show đã mô tả:

project/controllers/PageController.php<?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ố
    }
  }
?>
Задание 1

Hãy triển khai controller UserController, chứa mảng sau:

php<?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],
  ];
?>
Задание 2

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/.

Задание 3

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'.

Задание 4

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).

Задание 5

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.