El enrutamiento se maneja principalmente a través del archivo app/Config/Routes.php
.
// Esta es la estructura general para definir rutas:
$routes->get('ruta', 'Controlador::metodo'); // Ruta básica
$routes->get('ruta/(:segment)', 'Controlador::metodo/$1'); // Ruta con un parámetro, que se pasa como una variable al método:
$routes->match(['get', 'post'], 'ruta', 'Controlador::metodo'); // Rutas con varios verbos HTTP
// Ejemplo de: Ruta básica
$routes->get('/', 'Home::index');
Espacio de nombres predeterminado
Si al principio del Controlador se escribe:
- Sin un
\
: Se antepondrá el espacio de nombres predeterminado\App\Controllers\
. - Con un
\
: Se interpreta como un nombre de clase completamente calificado.
// Ejemplo de: Ruta con un nombre de clase completamente calificado.
$routes->get('blog', '\Acme\Blog\Controllers\Home::list'); // Ruta a \Acme\Blog\Controllers\Home::list()
Array Callable
Desde v4.2.0, puedes usar la sintaxis Array Callable
para especificar el controlador:
$routes->get('/', [\App\Controllers\Home::class, 'index']);
Cuando utiliza la sintaxis Array Callable
, el nombre de clase siempre se interpreta como un nombre de clase completamente calificado. Por lo tanto, el espacio de nombres predeterminado no tienen ningún efecto.
Para especificar el espacio de nombres puedes usar la palabra clave use
:
use App\Controllers\Home;
$routes->get('/', [Home::class, 'index']);
Marcadores de posición
Están disponibles los siguientes marcadores de posición:
- (:any): Todos los caracteres desde ese punto hasta el final del URI. Esto puede incluir múltiples segmentos de URI.
- (:segment): Restringe el resultado a un solo segmento.
- (:num): Cualquier número entero.
- (:alpha): Cualquier cadena de caracteres alfabéticos.
- (:alphanum): Cualquier combinación de caracteres alfabéticos o números enteros.
- (:hash): Es igual a
(:segment)
, pero utilizando identificadores hash.
Puedes crear marcadores de posición personalizados
Para organizar mejor tus rutas, puedes agruparlas:
$routes->group('api', function($routes) {
$routes->get('usuarios', 'APIUsuarios::index');
$routes->post('usuarios', 'APIUsuarios::crear');
});