How to route cutom URL with to custom controller in CodeIgniter?
You have to read the this page from the official documentation of codeigniter. It covers all related things to Routing URLs easily. All routes must be configured via the file:
application/config/routes.php
It could be something like this :
$route['user/(:any)'] = "user/user_detail/$1";
This can be achieved by overriding CI_Controller
class BUT dont change the original core files, like I said override the controller and put your logic in it.
Help: https://ellislab.com/codeigniter/user-guide/general/core_classes.html
how to create Codeigniter route that doesn't override the other controller routes?
Perhaps an easier solution would be to route it with the help of apache mod_rewrite in .htaccess
Here is an detailed explanation on how to achieve it: http://www.web-and-development.com/codeigniter-remove-index-php-minimize-url/
Hatem's answer (using the route config) is easier and cleaner, but pointing the usage of the _remap()
function maybe helpful in some cases:
inside the CI_Controller
, the _remap()
function will be executed on each call to the controller to decide which method to use. and there you can check if the method exist, or use some defined method. in your case:
application/controllers/User.php
class User extends CI_Controller { public function _remap($method, $params = array()) { if (method_exists(__CLASS__, $method)) { $this->$method($params); } else { array_unshift($params, $method); $this->user_detail($params); } } public function user_detail($params) { $username = $params[0]; echo 'username: ' . $username; } public function another_func() { echo "another function body!"; }}
this will result:
http://www.example.com/user/user_detail/john => 'username: john' http://www.example.com/user/mike ........... => 'username: mike' http://www.example.com/user/another_func ... => 'another function body!'
but it's not going to work with: http://www.example.com/mike , since the controller -even if it's the default controller- is not called at all, in this case, CI default behaviour is to look for a controller called mike
and if it's not found it will throws 404 error.
for more:
Codeigniter userguide 3: Controllers: Remapping Method Calls
Redirect to default method if CodeIgniter method doesn't exists.