Zastosowanie parametrów w trasach w MVC w PHP
Przyjrzyjmy się zastosowaniu opisanego na
bardziej życiowym przykładzie. Niech nasz kontroler
PageController zawiera tablicę stron
(te dane powinien zwracać model, ale z
modelami jeszcze się nie zajmowaliśmy, więc niech
dane na razie po prostu przechowują się w kontrolerze):
<?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',
];
}
}
?>
Zróbmy akcję show, która
będzie wyświetlać stronę o określonym
numerze (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()
{
// tutaj wyświetlimy stronę o określonym numerze
}
}
?>
Niech przy odwołaniu do adresu /page/1/
będzie wyświetlał się tekst pierwszej strony, przy
odwołaniu do adresu /page/2/ -
tekst drugiej strony i tak dalej. Zróbmy
odpowiednią trasę:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Zaimplementujmy opisany metod 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'] ]; // wyświetlamy stronę po numerze
}
}
?>
Zaimplementuj kontroler UserController,
zawierający następującą tablicę:
<?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],
];
?>
W kontrolerze UserController, zrób
akcję show, która będzie wyświetlać
użytkownika o określonym id. Niech będzie
dostępna pod adresem następującego rodzaju:
/user/:id/.
W kontrolerze UserController, zrób
akcję info, która będzie wyświetlać
imię lub wiek określonego użytkownika. Niech ta
akcja będzie dostępna pod adresem następującego
rodzaju: /user/:id/:key/, gdzie key
będzie miało wartość 'name', 'age'
lub 'salary'.
W kontrolerze UserController, zrób
akcję all, która będzie wyświetlać
listę wszystkich użytkowników na ekran. Niech ta akcja
będzie dostępna pod adresem następującego rodzaju:
/user/all/ (parametrów tu żadnych
nie będzie).
W kontrolerze UserController, zrób
akcję first, która będzie wyświetlać
listę N pierwszych użytkowników na ekran. Niech ta
akcja będzie dostępna pod adresem następującego
rodzaju: /user/first/:n/, gdzie w parametrze
będzie liczba użytkowników, których należy
wyświetlić na ekranie.