Aplicação de parâmetros em rotas no MVC em PHP
Vamos ver a aplicação do descrito em
um exemplo mais real. Suponha que nosso controlador
PageController contenha um array de páginas
(estes dados deveriam ser fornecidos pelo modelo, mas
ainda não abordamos os modelos, então vamos deixar
os dados armazenados no controlador por enquanto):
<?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',
];
}
}
?>
Vamos criar uma ação show que
exibirá na tela a página com um determinado
número (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()
{
// aqui exibiremos a página com um determinado número
}
}
?>
Suponha que ao acessar o endereço /page/1/
seja exibido o texto da primeira página, ao
acessar o endereço /page/2/ -
o texto da segunda página e assim por diante. Vamos criar
a rota correspondente:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Vamos implementar o método show descrito:
<?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'] ]; // exibe a página pelo número
}
}
?>
Implemente o controlador UserController,
contendo o seguinte array:
<?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],
];
?>
No controlador UserController, crie
uma ação show que irá exibir
o usuário por um determinado id. Suponha que ela
esteja acessível pelo endereço do seguinte tipo:
/user/:id/.
No controlador UserController, crie
uma ação info que irá exibir
o nome ou a idade de um determinado usuário. Suponha que esta
ação esteja acessível pelo endereço do seguinte
tipo: /user/:id/:key/, onde key
terá o valor 'name', 'age'
ou 'salary'.
No controlador UserController, crie
uma ação all que irá exibir
a lista de todos os usuários na tela. Suponha que esta ação
esteja acessível pelo endereço do seguinte tipo:
/user/all/ (sem parâmetros aqui).
No controlador UserController, crie
uma ação first que irá exibir
a lista dos N primeiros usuários na tela. Suponha que esta
ação esteja acessível pelo endereço do seguinte
tipo: /user/first/:n/, onde no parâmetro
estarão a quantidade de usuários que devem ser
exibidos na tela.