PHP да MVC да роутларда параметрларни қўллаш

Келтирилганларнинг амалиётини янада хаётий мисолда кўриб чиқайлик. Бизнинг контроллеримиз PageController саҳифалар массивини ўз ичига олсин (бу маълумотлар модел томонидан қайтарилиши керак, лекин биз моделлар билан ҳали тушунмаганмиз, шунинг учун маълумотлар ҳозирча контроллерда сақлансин):

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',
      ];
    }
  }
?>

Келик show-ни яратайлик, у белгиланган рақамли (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()
    {
      // бу ерда белгиланган рақамли саҳифани чиқарамиз
    }
  }
?>

/page/1/ манзилига мурожаат қилинғанда биринчи саҳифа матни чиқсин, /page/2/ манзилига мурожаат қилинғанда - иккинчи саҳифа матни ва ҳоказо. Мос роутни яратамиз:

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

Келтирилган show усулини амалга оширамиз:

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'] ]; // рақам буйича саҳифани чиқарамиз
    }
  }
?>
Задание 1

UserController контролерини амалга оширинг, у қуйидаги массивни ўз ичига олсин:

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

UserController контролерида, белгиланган id буйича фойдаланувчини чиқарадиган show амалиётини яратинг. У қуйидаги кўринишдаги манзил орқали мавжуд бўлсин: /user/:id/.

Задание 3

UserController контролерида, белгиланган фойдаланувчининг исми ёки ёшини чиқарадиган info амалиётини яратинг. Бу амалиёт қуйидаги кўринишдаги манзил орқали мавжуд бўлсин: /user/:id/:key/, бу ерда key 'name', 'age' ёки 'salary' қийматларига эга бўлади.

Задание 4

UserController контролерида, барча фойдаланувчилар рўйхатини экранга чиқарадиган all амалиётини яратинг. Бу амалиёт қуйидаги кўринишдаги манзил орқали мавжуд бўлсин: /user/all/ (бу ерда ҳеч қандай параметрлар бўлмайди).

Задание 5

UserController контролерида, биринчи N та фойдаланувчилар рўйхатини экранга чиқарадиган first амалиётини яратинг. Бу амалиёт қуйидаги кўринишдаги манзил орқали мавжуд бўлсин: /user/first/:n/, бу ерда параметрда экранга чиқарилиши керак бўлган фойдаланувчилар сони кўрсатилади.