Aplicación de parámetros en rutas en MVC en PHP
Veamos la aplicación de lo descrito en
un ejemplo más real. Supongamos que nuestro controlador
PageController contiene un array de páginas
(estos datos debería proporcionarlos el modelo, pero
aún no hemos tratado los modelos, así que por ahora
dejemos que los datos simplemente se almacenen en el controlador):
<?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',
];
}
}
?>
Creemos una acción show que
muestre en pantalla la página con un
número específico (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()
{
// aquí mostraremos la página con un número específico
}
}
?>
Supongamos que al acceder a la dirección /page/1/
se muestre el texto de la primera página, al
acceder a la dirección /page/2/ -
el texto de la segunda página y así sucesivamente. Creemos
la ruta correspondiente:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Implementemos el método descrito 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'] ]; // mostramos la página por número
}
}
?>
Implemente el controlador UserController,
que contenga el siguiente 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],
];
?>
En el controlador UserController, cree
una acción show, que muestre
el usuario por un id específico. Que
esté disponible en una dirección del siguiente tipo:
/user/:id/.
En el controlador UserController, cree
una acción info, que muestre
el nombre o la edad de un usuario dado. Que esta
acción esté disponible en una dirección del siguiente
tipo: /user/:id/:key/, donde key
tendrá el valor 'name', 'age'
o 'salary'.
En el controlador UserController, cree
una acción all, que muestre
la lista de todos los usuarios en pantalla. Que esta acción
esté disponible en una dirección del siguiente tipo:
/user/all/ (aquí no habrá ningún parámetro).
En el controlador UserController, cree
una acción first, que muestre
la lista de los N primeros usuarios en pantalla. Que esta
acción esté disponible en una dirección del siguiente
tipo: /user/first/:n/, donde en el parámetro
estará la cantidad de usuarios que se deben
mostrar en pantalla.