Използване на параметри в маршрути в MVC в PHP
Нека разгледаме приложението на описаното в
по-реален пример. Нека нашият контролер
PageController съдържа масив от страници
(тези данни трябва да се предоставят от модел, но с
модели все още не сме се запознали, така че нека
данните засега просто се съхраняват в контролера):
<?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',
];
}
}
?>
Нека създадем действие show, което
ще извежда на екрана страница с определен
номер (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()
{
// тук ще изведем страницата с определен номер
}
}
?>
Нека при достъп до адреса /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 => 'page 1',
2 => 'page 2',
3 => 'page 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/, където в параметъра
ще бъде броят потребители, които трябва да се
изведат на екрана.