Define routes explicitly using get/post/resource/group with filters, named routes, and constraints.
Routing in CodeIgniter 4
// app/Config/Routes.php
$routes->get("/", "Home::index");
$routes->get("/about", "Page::about");
// Resource routes
$routes->resource("posts"); // full CRUD
$routes->presenter("photos"); // HTML CRUD
// Parameters
$routes->get("/users/(:num)", "User::show/$1");
$routes->get("/posts/(:segment)", "Post::show/$1");
// Route groups
$routes->group("admin", ["filter" => "auth"], function($r) {
$r->get("/", "AdminDashboard::index");
$r->resource("users", ["controller" => "AdminUsers"]);
});
// Named routes
$routes->get("/login", "Auth::login", ["as" => "login"]);
// HTTP verb shortcuts
$routes->post("/users", "User::store");
$routes->put("/users/(:num)", "User::update/$1");
$routes->delete("/users/(:num)", "User::delete/$1");
// Auto-routing (legacy — disabled by default in CI4.2+)
$routes->setAutoRoute(false);