Va a haber ocasiones en las que vamos a tener que pasar información a nuestra aplicación pero desde la URL. En este capítulo vamos a aprender a pasar una URL descriptiva de la información que se va a mostrar en pantalla. Para ello vamos a trabajar en el archivo web.php dentro de la carpeta routes.
Incluimos la sintaxis sobre los dos archivos que hemos trabajado en este curso, el archivo Routes.php y el archivo web.php.
lib/Route.php
<?php
namespace Lib;
class Route
{
private static $routes = [];
// Método encargado de agregar rutas GET
public static function get($uri, $callback){
$uri = trim($uri, "/");
self::$routes['GET'][$uri] = $callback;
}
// Método encargado de agregar rutas POST
public static function post($uri, $callback){
$uri = trim($uri, "/");
self::$routes['POST'][$uri] = $callback;
}
// Método para recuperar la URI y el método
public static function dispatch() {
$uri = $_SERVER['REQUEST_URI'];
$uri = trim($uri, "/");
// Variable que nos mostrará el método que hemos utilizado
$method = $_SERVER['REQUEST_METHOD'];
foreach(self::$routes[$method] as $route => $callback){
if(strpos($route, ':') !== false){
$route = preg_replace('#:[a-zA-Z]+#', '([a-zA-Z]+)', $route,);
}
if(preg_match("#^$route$#", $uri , $matches)){
$params = array_slice($matches, 1);
$response = $callback(...$params);
if(is_array($response) || is_object($response)){
header('Content-Type: application/json');
echo json_encode($response);
} else {
echo $response;
}
return;
}
}
echo "404 Not Found";
}
}
routes/web.php
<?php
use Lib\Route;
Route::get('/', function(){
return [
'title' => 'Home',
'content' => 'Hola desde la página de Inicio'
];
});
Route::get('/contact', function(){
return 'Hola desde la página de contacto';
});
Route::get('/about', function(){
return 'Hola desde la página de acerca de';
});
Route::get('/courses/:slug', function($slug){
return "El curso es: " . $slug;
});
Route::dispatch();