Utilizarea parametrilor în rute în MVC în PHP
Să analizăm aplicarea celor descrise pe
un exemplu mai apropiat de realitate. Să presupunem că controlerul nostru
PageController conține un array de pagini
(aceste date ar trebui să fie returnate de model,
dar cu modelele încă nu ne-am ocupat, așa că
să presupunem că datele sunt stocate temporar în controler):
<?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',
];
}
}
?>
Să creăm acțiunea show, care
va afișa pe ecran pagina cu un anumit
număr (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()
{
// aici vom afișa pagina cu un anumit număr
}
}
?>
Să presupunem că la accesarea adresei /page/1/
va fi afișat textul primei pagini, la
accesarea adresei /page/2/ -
textul celei de-a doua pagini și așa mai departe. Să creăm
ruta corespunzătoare:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Să implementăm metoda descrisă 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'] ]; // afișăm pagina după număr
}
}
?>
Implementați controlerul UserController,
conținând următorul 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],
];
?>
În controlerul UserController, creați
acțiunea show, care va afișa
utilizatorul după un anumit id. Să presupunem că ea
va fi accesibilă la adresa de tipul:
/user/:id/.
În controlerul UserController, creați
acțiunea info, care va afișa
numele sau vârsta utilizatorului specificat. Să presupunem că această
acțiune va fi accesibilă la adresa de tipul:
/user/:id/:key/, unde key
va avea valoarea 'name', 'age'
sau 'salary'.
În controlerul UserController, creați
acțiunea all, care va afișa
lista tuturor utilizatorilor pe ecran. Să presupunem că această acțiune
va fi accesibilă la adresa de tipul:
/user/all/ (aici nu vor fi parametri).
În controlerul UserController, creați
acțiunea first, care va afișa
lista primilor N utilizatori pe ecran. Să presupunem că această
acțiune va fi accesibilă la adresa de tipul:
/user/first/:n/, unde în parametru
va fi numărul de utilizatori care trebuie
afișați pe ecran.