Параметри в маршрути в MVC в PHP
В предишния урок нашите маршрути имаха фиксирани адреси. Всъщност механизмът за маршрутизация е по- сложен - може да се направи така, че част от URI на страницата да попада в именувани параметри, достъпни след това в контролера.
Нека, например, нашите адреси да изглеждат
така: /test/param1/param2/,
където param1 и param2 са произволни
низове. При това искаме адреси от такъв
вид да се обработват от едно действие на контролера.
За това трябва да измислим име на параметър
и пред него да поставим двоеточие, ето така:
<?php
use \Core\Route;
return [
new Route('/test/:var1/:var2/', 'page', 'act'),
];
?>
В нашия случай ще се получи, че всички заявки
от вида /test/параметър1/параметър2/
ще попадат в действие act. При
това в първия параметър на това действие ще
попада асоциативен масив с параметри:
текстът, който ще е на мястото на първия параметър,
попада в елемент на масива с ключ 'var1',
а текстът на втория параметър - в 'var2'.
Нека, например, в адресната лента е въведено
следното: /test/eee/bbb/. Нека
видим какво ще съдържа първият параметър
на действието:
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
public function act($params)
{
var_dump($params); // ['var1' => 'eee', 'var2' => 'bbb']
}
}
?>
Направете контролер NumController,
а в него - действие sum. Нека това
действие обработва адреси от следния вид:
/nums/:n1/:n2/:n3/, където параметрите
са някакви числа. Направете така, че
на екрана да се извежда сумата от подадените числа.