Skip to content
Technomantus Corvi edited this page Sep 5, 2026 · 1 revision

Rutas

Formato

// routes.php
return [
    'GET  /ruta'        => 'MiController@metodo',
    'POST /ruta'        => 'MiController@store',
    'PUT  /ruta/{id}'   => 'MiController@update',
    'DELETE /ruta/{id}' => 'MiController@destroy',
];

Cuidado con los espacios. Las claves de ruta se comparan como strings exactos ("GET /ruta"), así que un espacio extra por alineación de columnas ('GET /ruta') rompe el match en silencio — verás un 404 sin ningún error. Mantén exactamente un espacio entre el método y el path.

Parámetros de ruta

Los segmentos entre {nombre} se capturan y se pasan como argumentos al método:

// routes.php
'GET /articulos/{slug}' => 'ArticleController@show',

// ArticleController.php
public function show(string $slug): void { /* ... */ }

El orden importa

Las rutas literales más específicas deben ir antes que los patrones dinámicos que puedan coincidir con la misma URL:

'GET /todo/create'  => 'TodoController@create', // debe ir primero
'GET /todo/{id}'     => 'TodoController@show',   // si no, esto captura "create" como id

Method override (PUT/DELETE desde formularios HTML)

Los navegadores solo envían GET y POST de forma nativa. Para usar PUT/DELETE desde un formulario HTML normal:

<form method="POST" action="/todo/42">
    <input type="hidden" name="_method" value="DELETE">
    <button type="submit">Eliminar</button>
</form>

El ciclo de vida de una petición

Navegador → public/index.php → App::run()
│
├── loadEnv() Lee .env → $_ENV
├── registerAutoloader() Busca clases en core/, controllers/, models/
├── configureErrors() Debug on/off según APP_DEBUG
└── dispatch()
│
├── Detecta método HTTP (+ override _method)
├── Normaliza la URI
├── (si hay prefijo tipo selector de idioma) quita /xx/ y fija el idioma
├── Encuentra ruta exacta o patrón {param}
└── Instancia el Controller → llama método($params)
│
└── $this->view('nombre', $data)

Rutas con prefijo de idioma

Si usas el selector de idioma por URL de Internacionalización (/en/todo, /es/todo), no necesitas duplicar rutas con un segmento de idioma — el router quita un prefijo /xx/ reconocido antes de comparar contra routes.php, así que una única entrada 'GET /todo' funciona para cada idioma habilitado.

Añadir un recurso nuevo

  1. Tabla SQL en tu base de datos.
  2. models/TuModelo.php — ver Modelos.
  3. Rutas en routes.php.
  4. controllers/TuController.php — ver Controladores y peticiones.
  5. Vistas en views/tu-recurso/ — ver Vistas y layout.

Clone this wiki locally