Použití parametrů v routách v MVC v PHP
Podívejme se na použití popsaného na
životnějším příkladu. Předpokládejme, že náš kontroler
PageController obsahuje pole stránek
(tato data by měl vracet model, ale s
modely jsme se ještě neprobírali, takže nechť
data prozatím jen uložená v kontroleru):
<?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',
];
}
}
?>
Vytvořme akci show, která
bude zobrazovat stránku s určitým
číslo (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()
{
// zde zobrazíme stránku s určitým číslem
}
}
?>
Při přístupu na adresu /page/1/
nechť se zobrazí text první stránky, při
přístupu na adresu /page/2/ -
text druhé stránky a tak dále. Vytvořme
odpovídající routu:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Implementujme popsanou metodu 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'] ]; // zobrazíme stránku podle čísla
}
}
?>
Implementujte kontroler UserController,
obsahující následující pole:
<?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],
];
?>
V kontroleru UserController vytvořte
akci show, která bude zobrazovat
uživatele podle určitého id. Nechť je
přístupná na adrese následujícího typu:
/user/:id/.
V kontroleru UserController vytvořte
akci info, která bude zobrazovat
jméno nebo věk daného uživatele. Nechť je
tato akce přístupná na adrese následujícího
typu: /user/:id/:key/, kde key
bude mít hodnotu 'name', 'age'
nebo 'salary'.
V kontroleru UserController vytvořte
akci all, která bude zobrazovat
seznam všech uživatelů. Nechť je tato akce
přístupná na adrese následujícího typu:
/user/all/ (žádné parametry zde
nebudou).
V kontroleru UserController vytvořte
akci first, která bude zobrazovat
seznam prvních N uživatelů. Nechť je tato
akce přístupná na adrese následujícího typu:
/user/first/:n/, kde v parametru
bude počet uživatelů, které je třeba
zobrazit.