Параметры в роутах в MVC в PHP
В предыдущем уроке наши роуты имели фиксированные адреса. На самом деле механизм роутинга более сложный - можно сделать так, чтобы часть URI страницы попадала в именованные параметры, доступные затем в контроллере.
Пусть, к примеру, наши адреса будут выглядеть
вот так: /test/параметр1/параметр2/,
где параметр1 и параметр2 - произвольные
строки. При этом мы хотим, чтобы адреса такого
вида обрабатывались одним действием контроллера.
Для этого следует придумать имя параметра
и перед ним поставить двоеточие, вот так:
<?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/, где параметрами
будут некоторые числа. Сделайте так, чтобы
на экран выводилась сумма переданных чисел.