About Jamie on Software

Jamie on Software is Jamie Rumbelow's online journal. An opinionated, charismatic teenager's views on web development, business, programming, education, technology and journalism.

Sparkplugs

We build ExpressionEngine and MojoMotor add-ons to help web professionals build better sites.

http://getsparkplugs.com/

Tags
Tweets
Feeds
We Love
Powered by Squarespace

Entries in rest (1)

Friday
Apr152011

RESTful CodeIgniter Routes

I love Ruby on Rails’ resourceful routing patterns. The ability to map specific HTTP verbs to actions is a beautifully clean way of implementing a common RESTful pattern.

While it would be difficult and counterintuitive to re-implement Rails’ router in PHP, we can use CodeIgniter’s routing system to good effect and get some similar RESTful route patterns.

/* --------------------------------------------------------------
 * PRODUCTS
 * ------------------------------------------------------------ */
$route['products'] = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 'products/get_index' : 'products/post_create';
$route['products/new'] = 'products/get_new';
$route['products/(:any)'] = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 'products/get_show/$1' : 'products/post_update/$1';
$route['products/(:any)/edit'] = 'products/get_edit/$1';
$route['products/(:any)/confirm_delete'] = 'products/post_confirm_delete/$1';
$route['products/(:any)/delete'] = 'products/post_delete/$1';

This will give us the following URL to controller function mappings:

GET /products                   -> get_index
GET /products/new               -> get_new
GET /products/1                 -> get_show(1)
GET /products/1/edit            -> get_edit(1)
POST /products                  -> post_create
POST /products/1                -> post_update(1)
POST /products/1/confirm_delete -> post_confirm_delete(1)
POST /products/1/delete         -> post_delete(1)

The beauty of this is that not only do you get a common URL pattern, but the method names match up with both functionality and HTTP method.

This isn’t entirely RESTful; if we were building a properly RESTful API we’d be using the PUT and DELETE methods instead. When you’re doing something like this, Phil Sturgeon’s REST Controller is your best bet.

For simple RESTful solutions, I absolutely love this reusable snippet of routing code.