Search code examples
phpcodeignitercodeigniter-routing

CodeIgniter Routing - 404 error


I'm developping a website using CI and today I'm facing a problem in the admin part.

I've an admin and I can manage users

the structure of my application is:

controllers/admin/users.php

in users.php I've some functions: index(), view($id), login(), edit($id)

views/admin/users/index.php
views/admin/users/view.php
views/admin/users/login.php
views/admin/users/edit.php

to access the login page the url is:

www.mysite.com/admin/login

to access the list of users the url is:

www.mysite.com/admin/users

to view a specific user (id=5) the url is: www.mysite.com/admin/users/5

everything is working well except for the edit function, I got an url when I call www.mysite.com/admin/edit/5

here are my routing rules:

$route['admin/users/(:any)'] = 'admin/users/view/$1';
$route['admin/users'] = 'admin/users';

$route['admin/users/login'] = 'admin/users/login';

$route['admin/users/edit/(:num)'] = 'admin/users/edit/$1';

$route['admin'] = 'admin/users/login';

I miss something? what is wrong?


Solution

  • Try putting it higher in the sequence, since route are matched top to bottom:

    $route['admin'] = 'admin/users/login';
    $route['admin/users'] = 'admin/users';
    $route['admin/users/login'] = 'admin/users/login';
    $route['admin/users/edit/(:num)'] = 'admin/users/edit/$1';
    $route['admin/users/(:any)'] = 'admin/users/view/$1';
    

    That :any might be catching too much and interfere, I'd leave it as a last catch-all route for all those non specified.