PHPのMVCにおけるルートパラメータの適用
記述された内容をより実践的な例で見てみましょう。
コントローラーPageControllerがページの配列を
含んでいるものとします(これらのデータはモデルが
提供すべきですが、モデルについてはまだ説明していないため、
データはとりあえずコントローラーに保持させておきます):
<?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を作成しましょう:
<?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番目のページのテキストが表示されるようにします。
対応するルートを作成しましょう:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
説明したメソッドshowを実装します:
<?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'] ]; // 番号でページを表示します
}
}
?>
次の配列を含むコントローラーUserControllerを
実装してください:
<?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],
];
?>
コントローラーUserControllerに、
特定のidでユーザーを表示する
アクションshowを作成してください。
次の形式のアドレスでアクセス可能にしてください:
/user/:id/。
コントローラーUserControllerに、
指定されたユーザーの名前または年齢を表示する
アクションinfoを作成してください。
このアクションは次の形式のアドレスで
アクセス可能にしてください:/user/:id/:key/。
ここでkeyの値は'name'、
'age'、または'salary'とします。
コントローラーUserControllerに、
すべてのユーザーのリストを表示する
アクションallを作成してください。
このアクションは次の形式のアドレスで
アクセス可能にしてください:/user/all/
(ここにはパラメータはありません)。
コントローラーUserControllerに、
最初のN人のユーザーリストを表示する
アクションfirstを作成してください。
このアクションは次の形式のアドレスで
アクセス可能にしてください:/user/first/:n/。
パラメータには画面に表示するユーザーの数が入ります。