Anvendelse af parametre i ruter i MVC i PHP
Lad os se anvendelsen af det beskrevne på
et mere livagtigt eksempel. Lad vores controller
PageController indeholde en matrix af sider
(disse data bør leveres af modellen, men med
modeller har vi endnu ikke dykket ned i, så lad
dataene foreløbig blot opbevares i controlleren):
<?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',
];
}
}
?>
Lad os lave en handling show, som
vil vise en side med et bestemt
nummer (id) på skærmen:
<?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()
{
// her vil vi vise siden med et bestemt nummer
}
}
?>
Lad ved henvendelse til adressen /page/1/
teksten fra den første side blive vist, ved
henvendelse til adressen /page/2/ -
teksten fra den anden side og så videre. Lad os lave
en tilsvarende rute:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Lad os implementere den beskrevne metode 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'] ]; // viser siden efter nummer
}
}
?>
Implementer controlleren UserController,
som indeholder følgende matrix:
<?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],
];
?>
I controlleren UserController, lav
handlingen show, som vil vise
brugeren med et bestemt id. Lad den
være tilgængelig på en adresse af følgende type:
/user/:id/.
I controlleren UserController, lav
handlingen info, som vil vise
navnet eller alderen for den givne bruger. Lad denne
handling være tilgængelig på en adresse af følgende
type: /user/:id/:key/, hvor key
vil have værdien 'name', 'age'
eller 'salary'.
I controlleren UserController, lav
handlingen all, som vil vise
listen over alle brugere på skærmen. Lad denne handling
være tilgængelig på en adresse af følgende type:
/user/all/ (der vil ikke være nogen
parametre her).
I controlleren UserController, lav
handlingen first, som vil vise
listen over de N første brugere på skærmen. Lad denne
handling være tilgængelig på en adresse af følgende
type: /user/first/:n/, hvor parameteren
vil være antallet af brugere, som skal
vises på skærmen.