Utilizzo dei parametri nelle rotte in MVC in PHP
Esaminiamo l'applicazione di quanto descritto in un
esempio più realistico. Supponiamo che il nostro controller
PageController contenga un array di pagine
(questi dati dovrebbero essere forniti dal model,
ma non abbiamo ancora approfondito i model, quindi
per il momento i dati sono semplicemente memorizzati nel controller):
<?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',
];
}
}
?>
Creiamo un'azione show che
visualizzi a schermo la pagina con un determinato
numero (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()
{
// qui visualizzeremo la pagina con il numero specificato
}
}
?>
Supponiamo che quando si accede all'URL /page/1/
venga visualizzato il testo della prima pagina, quando
si accede all'URL /page/2/ -
il testo della seconda pagina e così via. Creiamo
la rotta corrispondente:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Implementiamo il metodo show descritto:
<?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'] ]; // visualizziamo la pagina per numero
}
}
?>
Implementate il controller UserController,
contenente il seguente 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],
];
?>
Nel controller UserController, create
un'azione show, che visualizzi
l'utente in base a un determinato id. Supponete che essa
sia accessibile tramite un URL del tipo:
/user/:id/.
Nel controller UserController, create
un'azione info, che visualizzi
il nome o l'età di un determinato utente. Supponete che questa
azione sia accessibile tramite un URL del tipo:
/user/:id/:key/, dove key
avrà valore 'name', 'age'
o 'salary'.
Nel controller UserController, create
un'azione all, che visualizzi
l'elenco di tutti gli utenti a schermo. Supponete che questa azione
sia accessibile tramite un URL del tipo:
/user/all/ (qui non ci saranno parametri).
Nel controller UserController, create
un'azione first, che visualizzi
l'elenco dei primi N utenti a schermo. Supponete che questa
azione sia accessibile tramite un URL del tipo:
/user/first/:n/, dove nel parametro
ci sarà il numero di utenti da
visualizzare a schermo.