Parametrien käyttö reiteissä MVC:ssä PHP:ssä
Katsotaanpa kuvattua sovellusta käytännönläheisemmässä esimerkissä. Oletetaan, että ohjainkontrollerimme
PageController sisältää sivutaulukon
(nämä tiedot pitäisi palauttaa malli, mutta
malleja ei ole käsitelty vielä, joten olkoot
tiedot toistaiseksi vain tallennettuna ohjainkontrollerissa):
<?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',
];
}
}
?>
Tehdään toiminto show, joka
näyttää ruudulla sivun tietyllä
numerolla (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()
{
// tässä näytetään sivu tietyllä numerolla
}
}
?>
Oletetaan, että osoitteeseen /page/1/
siirryttäessä näytetään ensimmäisen sivun teksti,
osoitteeseen /page/2/ siirryttäessä -
toisen sivun teksti ja niin edelleen. Luodaan
vastaava reitti:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Toteutetaan kuvattu metodi 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'] ]; // näytetään sivu numeron perusteella
}
}
?>
Toteuta ohjainkontrolleri UserController,
joka sisältää seuraavan taulukon:
<?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],
];
?>
Ohjainkontrollerissa UserController, tee
toiminto show, joka näyttää
käyttäjän tietyllä id:llä. Olkoon se
saatavilla seuraavanmuotoisessa osoitteessa:
/user/:id/.
Ohjainkontrollerissa UserController, tee
toiminto info, joka näyttää
annetun käyttäjän nimen tai iän. Olkoon tämä
toiminto saatavilla seuraavanmuotoisessa osoitteessa:
/user/:id/:key/, jossa key
on arvoltaan 'name', 'age'
tai 'salary'.
Ohjainkontrollerissa UserController, tee
toiminto all, joka näyttää
listan kaikista käyttäjistä ruudulla. Olkoon tämä toiminto
saatavilla seuraavanmuotoisessa osoitteessa:
/user/all/ (parametreja ei tässä tapauksessa
ole).
Ohjainkontrollerissa UserController, tee
toiminto first, joka näyttää
listan N ensimmäisestä käyttäjästä ruudulla. Olkoon tämä
toiminto saatavilla seuraavanmuotoisessa osoitteessa:
/user/first/:n/, jossa parametrissa
on käyttäjien lukumäärä, jotka tulee
näyttää ruudulla.