Bruk av parametre i ruter i MVC i PHP
La oss se på anvendelsen av det beskrevet på
et mer livaktig eksempel. La vår kontroller
PageController inneholde en array med sider
(disse dataene burde leveres av modellen, men med
modeller har vi ikke behandlet ennå, så la
dataene foreløpig bare lagres i kontrolleren):
<?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',
];
}
}
?>
La oss lage en handling show, som
vil vise på skjermen en side med et bestemt
nummer (id):
<?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
}
}
?>
La ved tilgang til adressen /page/1/
blir teksten på den første siden vist, ved
tilgang til adressen /page/2/ -
teksten på den andre siden og så videre. La oss lage
tilsvarende rute:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
La oss implementere den beskrevne metoden 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 etter nummer
}
}
?>
Implementer kontrolleren UserController,
som inneholder følgende array:
<?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 kontrolleren UserController, lag
handlingen show, som vil vise
brukeren med et bestemt id. La den
være tilgjengelig på en adresse av følgende type:
/user/:id/.
I kontrolleren UserController, lag
handlingen info, som vil vise
navn eller alder til en gitt bruker. La denne
handlingen være tilgjengelig på en adresse av følgende
type: /user/:id/:key/, hvor key
vil ha verdien 'name', 'age'
eller 'salary'.
I kontrolleren UserController, lag
handlingen all, som vil vise
listen over alle brukere på skjermen. La denne handlingen
være tilgjengelig på en adresse av følgende type:
/user/all/ (ingen parametere her
vil det være).
I kontrolleren UserController, lag
handlingen first, som vil vise
listen over de N første brukerne på skjermen. La denne
handlingen være tilgjengelig på en adresse av følgende
type: /user/first/:n/, hvor i parameteren
vil antall brukere som skal
vises på skjermen være.