Parametri în rute în MVC în PHP
În lecția precedentă, rutele noastre aveau adrese fixe. De fapt, mecanismul de rutare este mai complex - se poate face ca o parte a URI-ului paginii să ajungă în parametri numiți, accesibili apoi în controller.
Să presupunem, de exemplu, că adresele noastre vor arăta
așa: /test/param1/param2/,
unde param1 și param2 sunt șiruri
arbitrare. În același timp, dorim ca adresele de acest
tip să fie procesate de o acțiune a controller-ului.
Pentru aceasta, trebuie să inventăm un nume pentru parametru
și să punem un două puncte înaintea lui, astfel:
<?php
use \Core\Route;
return [
new Route('/test/:var1/:var2/', 'page', 'act'),
];
?>
În cazul nostru, se va întâmpla ca toate cererile
de tipul /test/parametru1/parametru2/
să ajungă la acțiunea act. În
același timp, în primul parametru al acestei acțiuni va
ajunge un array asociativ cu parametrii:
textul care va fi în locul primului parametru,
va ajunge în elementul array-ului cu cheia 'var1',
iar textul celui de-al doilea parametru - în 'var2'.
Să presupunem, de exemplu, că în bara de adrese este introdus
următorul lucru: /test/eee/bbb/. Să
vedem ce va conține primul parametru
al acțiunii:
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
public function act($params)
{
var_dump($params); // ['var1' => 'eee', 'var2' => 'bbb']
}
}
?>
Creați un controller NumController,
și în el - acțiunea sum. Fie ca această
acțiune să proceseze adrese de următoarea formă:
/nums/:n1/:n2/:n3/, unde parametrii
vor fi niște numere. Faceți ca
pe ecran să fie afișată suma numerilor transmise.