Toepassing van parameters in routes in MVC in PHP
Laten we de toepassing van het beschrevene bekijken aan de hand van
een meer realistisch voorbeeld. Stel dat onze controller
PageController een array met pagina's bevat
(deze gegevens zouden door het model moeten worden teruggegeven, maar met
modellen hebben we nog niet behandeld, dus laten we de
gegevens voorlopig gewoon in de controller worden opgeslagen):
<?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',
];
}
}
?>
Laten we een actie show maken, die
een pagina met een specifiek
nummer (id) op het scherm zal weergeven:
<?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()
{
// hier geven we de pagina met een specifiek nummer weer
}
}
?>
Stel dat bij toegang tot het adres /page/1/
de tekst van de eerste pagina wordt weergegeven, bij
toegang tot het adres /page/2/ -
de tekst van de tweede pagina, enzovoort. Laten we
de bijbehorende route maken:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Laten we de beschreven methode show implementeren:
<?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'] ]; // toon pagina op nummer
}
}
?>
Implementeer de controller UserController,
bevattende de volgende 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],
];
?>
Maak in de controller UserController een
actie show, die de
gebruiker met een specifieke id weergeeft. Laat het
beschikbaar zijn op een adres van het volgende type:
/user/:id/.
Maak in de controller UserController een
actie info, die de
naam of leeftijd van de opgegeven gebruiker weergeeft.
Laat deze actie beschikbaar zijn op een adres van het
volgende type: /user/:id/:key/, waar key
de waarde 'name', 'age'
of 'salary' heeft.
Maak in de controller UserController een
actie all, die de
lijst van alle gebruikers op het scherm weergeeft. Laat deze actie
beschikbaar zijn op een adres van het volgende type:
/user/all/ (hier zijn geen
parameters).
Maak in de controller UserController een
actie first, die de
lijst van de eerste N gebruikers op het scherm weergeeft. Laat deze
actie beschikbaar zijn op een adres van het volgende type: /user/first/:n/, waar in de parameter
het aantal gebruikers staat dat
op het scherm moet worden weergegeven.