Применение параметров в роутах в MVC в PHP
Давайте посмотрим применение описанного на
более жизненном примере. Пусть наш контроллер
PageController содержит массив страниц
(эти данные должна отдавать модель, но с
моделями мы еще не разобрались, поэтому пусть
данные пока просто хранятся в контроллере):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'страница 1',
2 => 'страница 2',
3 => 'страница 3',
];
}
}
?>
Давайте сделаем действие show, которое
будет выводить на экран страницу с определенным
номером (id):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'страница 1',
2 => 'страница 2',
3 => 'страница 3',
];
}
public function show()
{
// здесь выведем страницу с определенным номером
}
}
?>
Пусть при обращении к адресу /page/1/
будет выводится текст первой страницы, при
обращении к адресу /page/2/ -
текст второй страницы и так далее. Сделаем
соответствующий роут:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Реализуем описанный метод show:
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'страница 1',
2 => 'страница 2',
3 => 'страница 3',
];
}
public function show($params)
{
echo $this->pages[ $params['id'] ]; // выводим страницу по номеру
}
}
?>
Реализуйте контроллер UserController,
содержащий следующий массив:
<?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],
];
?>
В контроллере UserController, сделайте
действие show, которое будет выводить
юзера по определенному id. Пусть оно
будет доступно по адресу следующего вида:
/user/:id/.
В контроллере UserController, сделайте
действие info, которое будет выводить
имя или возраст заданного юзера. Пусть это
действие будет доступно по адресу следующего
вида: /user/:id/:key/, где key
будет иметь значение 'name', 'age'
или 'salary'.
В контроллере UserController, сделайте
действие all, которое будет выводить
список всех юзеров на экран. Пусть это действие
будет доступно по адресу следующего вида:
/user/all/ (параметров тут никаких
не будет).
В контроллере UserController, сделайте
действие first, которое будет выводить
список N первых юзеров на экран. Пусть это
действие будет доступно по адресу следующего
вида: /user/first/:n/, где в параметре
будет количество юзеров, которые следует
вывести на экран.