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

特定の番号(id)を持つページを表示する アクション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()
    {
      // ここで特定の番号のページを表示します
    }
  }
?>

アドレス/page/1/にアクセスすると最初のページの テキストが表示され、アドレス/page/2/にアクセスすると 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/。 パラメータには画面に表示するユーザーの数が入ります。