Enrutamiento en CodeIgniter 4: rutas explícitas y Auto Routing Improved

Define rutas GET y POST, controladores y parámetros en CodeIgniter 4; configura Auto Routing Improved y conoce sus límites.

Enrutamiento en CodeIgniter 4: rutas explícitas y Auto Routing Improved

El enrutador relaciona una URL y un método HTTP con un controlador. Las rutas explícitas muestran qué acciones están disponibles; Auto Routing Improved es una alternativa que se configura de forma deliberada. Comprueba tu versión de CodeIgniter antes de aplicar estos ejemplos basados en la documentación reciente.

Define rutas explícitas

Añade las rutas al objeto $routes ya disponible en app/Config/Routes.php. Importa Products, usa GET para consultar y POST para crear. (:num) captura un segmento numérico y se lo pasa a show. Las tres rutas son un ejemplo coherente; adapta nombres y permisos a tu aplicación.

<?php
// app/Config/Routes.php
use App\Controllers\Products;

$routes->get('products', [Products::class, 'index']);
$routes->get('products/(:num)', [Products::class, 'show']);
$routes->post('products', [Products::class, 'create']);

Crea el controlador

Crea app/Controllers/Products.php con el espacio de nombres App\Controllers. Los métodos públicos vinculados a las rutas devuelven una respuesta; helperMethod es protegido y no es una acción expuesta. El ejemplo devuelve datos ficticios: añade validación, almacenamiento y control de acceso antes de crear recursos reales.

<?php
// app/Controllers/Products.php
namespace App\Controllers;

class Products extends BaseController
{
    public function index(): string
    {
        return 'Products';
    }

    public function show(int $id): string
    {
        return 'Product ' . $id;
    }

    public function create()
    {
        return $this->response->setStatusCode(201)->setJSON(['created' => true]);
    }

    protected function helperMethod(): void
    {
        // Internal logic.
    }
}

Protege las acciones

Usa GET para leer y POST para modificar. Protege las acciones sensibles con autenticación y autorización, valida entradas y configura la protección CSRF para los formularios según la aplicación. Definir una ruta no asegura por sí solo su controlador.

Auto Routing Improved como alternativa

Activa $autoRoute=true en app/Config/Routing.php y $autoRoutesImproved=true en app/Config/Feature.php. Los métodos accesibles llevan un prefijo de verbo HTTP: getHello() puede responder a GET /hello-world/hello en HelloWorld. La ruta predeterminada a Home::index puede impedir el enrutamiento automático de /; elimínala si quieres que también la raíz se resuelva automáticamente. Los fragmentos siguientes corresponden a archivos distintos y muestran otro modo de uso; comprueba las prioridades antes de combinarlo con las rutas explícitas del ejemplo.

// app/Config/Routing.php
public bool $autoRoute = true;

// app/Config/Feature.php
public bool $autoRoutesImproved = true;

// Example auto-routed method: GET /hello-world/hello
public function getHello(): string { return 'Hello'; }

Nombres, segmentos y límites

La correspondencia entre segmentos URL, controladores y métodos sigue las reglas de la versión instalada. Prefiere rutas explícitas para URL públicas estables o controles precisos de métodos y filtros. Evita exponer accidentalmente métodos públicos o acciones administrativas.

Comprueba las rutas

Ejecuta php spark routes para inspeccionar rutas registradas y prueba peticiones GET y POST permitidas y prohibidas. Comprueba respuestas 404/405, orden de las rutas y filtros. Las rutas dinámicas pueden no aparecer entre las rutas explícitas registradas.

php spark routes

Fuentes oficiales

Rutas: https://codeigniter4.github.io/CodeIgniter4/incoming/routing.html ; Auto Routing Improved: https://codeigniter4.github.io/CodeIgniter4/incoming/auto_routing_improved.html ; controladores: https://codeigniter4.github.io/CodeIgniter4/incoming/controllers.html .

Compartir

¿Cuál es tu reacción?

Me gusta Me gusta 0
No me gusta No me gusta 0
Me encanta Me encanta 0
Divertido Divertido 0
Enfadado Enfadado 0
Triste Triste 0
¡Vaya! ¡Vaya! 0