For any queries you can reach us at / WhatsApp us: +919158876092

URI Routing in CodeIgniter 4


Routing rules are defined in your /app/Config/Routes.php file.

There is a one-to-one relationship between a URL string and its corresponding controller class/method. The segments in a URI normally follow this pattern:


$routes->add('from', 'to', $options);

In some cases, you may want to remap this relationship so that a different class/method can be called instead of the one corresponding to the URL.

To learn how to implement routers on a real-world project, we will assume that we are creating an application for managing contact details. The following table shows the URLs that will be working with.

No. URL Route Controller Method
1 / $route->add('Contacts::index') Contacts index
2 /contacts $route->add('Contacts::list') Contacts list
3 /contacts/add $route->add('Contacts::contacts/add') Contacts add
4 /contacts/create $route->post('Contacts::contacts/create') Contacts add
5 /contacts/edit/id $route->get('Contacts::contacts/edit/(:num)') Contacts edit
6 /contacts/update $route->post('Contacts::contacts/update') Contacts update
7 /contacts/delete/id $route->get('Contacts::contacts/delete/(:num)') welcome delete

Create URL's for Application

create routes for our project. Open /app/Config/Routes.php

$routes->add('/', 'Contacts::index');
$routes->add('contacts/list', 'Contacts::list');
$routes->add('contacts/add', 'Contacts::add');
$routes->post('contacts/create', 'Contacts::create');
$routes->get('contacts/edit/(:any)', 'Contacts::edit/$1');
$routes->post('contacts/update', 'Contacts::update');
$routes->get('contacts/delete/(:any)', 'Contacts::delete/$1');

The following table shows the respective URLs obtained from the above-defined routes

No. Route URL
1 $routes->add('/', 'Contacts::index'); http://localhost
2 $routes->add('contacts/list', 'Contacts::list') http://localhost/contacts/list
3 $routes->add('contacts/add', 'Contacts::add'); http://localhost/contacts/add
3 $routes->post('contacts/create', 'Contacts::create'); http://localhost/contacts/create
4 $routes->get('contacts/edit/(:any)', 'Contacts::edit/$1'); http://localhost/contacts/edit/1
5 $routes->post('contacts/update', 'Contacts::update'); http://localhost/contacts/update/1
6 $routes->get('contacts/delete/(:any)', 'Contacts::delete/$1'); http://localhost/contacts/delete/1

Directory structure

	+ contacts
		- add.php
		- list.php
		- edit.php

	+ innerpages
		- header.php
		- footer.php
		- template.php
	- home.php

Global Options

The methods for creating a route (add, get, post, resource etc.) can take an array of options that can modify the generated routes or further restrict them. The $options array is always the last parameter:
$routes->get('from', 'to', $options);
$routes->post('from', 'to', $options);
$routes->put('from', 'to', $options);
$routes->head('from', 'to', $options);
$routes->options('from', 'to', $options);
$routes->delete('from', 'to', $options);
$routes->patch('from', 'to', $options);
$routes->match(['get', 'put'], 'from', 'to', $options);
$routes->resource('photos', $options);
$routes->map($array, $options);
$routes->group('name', $options, function());