Example of Defining Routes
The list below are defined routes.
For auto routing, your controller should NOT have
$autoroute=FALSE;
You need to enable auto route in common.conf.php as well
$config['AUTOROUTE'] = TRUE;
Auto routes are accessed as http://domain.com/classname/methodname/param1/param2. If your class is named in a camel Case convention, you access it with a '-'. Parameters in auto route are accessed with integer Index instead of a key. Example:
class HelloWorldController extends DooController{
public function sayhi(){
if(!empty($this->params)){
print_r($this->params);
echo 'Bye! '. $this->params[2];
}
}
}
# You access it via: http://domain.com/hello-world/sayhi/I am DooPHP/Second-name-here/Darkredz
# You will get a result like this:
Array
(
[0] => I am DooPHP
[1] => Second-name-here
[2] => Darkredz
)
Bye! Darkredz
Defining Fixed routes. The action method needs to be a public non-static function.
// Define your URI routes here.
// $route[Request Method][Uri] = array( class, action method, [options, etc.])
$route['*']['/'] = array('MainController', 'index');
$route['get']['/url'] = array('MainController', 'url');
$route['post']['/news/update'] = array('NewsController', 'update');
A route with parameters.
$route['*']['/news/:id'] = array('NewsController', 'getNews');
$route['*']['/archive/:year/:month'] = array('NewsController', 'archive');
Then you access the params in the Controller via:
public function getNews(){
echo $this->params['id'];
}
public function archive(){
echo $this->params['year'];
echo $this->params['month'];
}
Here's how you define with extension name.
$route['*']['/simple.rss'] = array('FeedController', 'getRss');
$route['*']['/simple.atom'] = array('FeedController', 'getAtom');
Parameters & extension name.
$route['*']['/food/list/:id'] = array('RestController',
'listFood',
'extension'=>'.json'
);
$route['post']['/food/create/:id'] = array('RestController',
'createFood',
'extension'=>'.json');
Here's how you define with extension name.
$route['*']['/simple.rss'] = array('FeedController', 'rss');
$route['*']['/simple.atom'] = array('FeedController', 'atom');
Routes redirection:
// here's how you do redirection to an existing route internally
// http status code is optional, default 302 Moved Temporarily
$route['*']['/about'] = $route['*']['/home'] = $route['*']['/'];
$route['*']['/easy'] = array('redirect', '/simple');
$route['*']['/easier'] = array('redirect', '/simple', 301);
// External redirect
$route['*']['/doophp'] = array('redirect', 'http://doophp.com/');
If your Controller is in a sub folder. For example, it's in protected/controller/admin/AdminController.php
$route['*']['/admin'] = array('admin/AdminController', 'index');
If you need Authentication for it quickly:
//Http digest auth and subfolder example
$route['*']['/admin'] = array('admin/AdminController', 'index',
'authName'=>'Food Api Admin',
'auth'=>array('admin'=>'1234', 'demo'=>'abc'),
'authFailURL'=>'/admin/fail');
//Instead of redirect when fail, just show a message, authFail
$route['*']['/admin'] = array('admin/AdminController', 'index',
'authName'=>'Food Api Admin',
'auth'=>array('admin'=>'1234', 'demo'=>'abc'),
'authFail'=>'Please login to the admin site!');
If you want to filter the parameters, you can use regular expressions.
// This will only match value of Year 4 digits and Month 2 digits
$route['*']['/news/:year/:month'] = array('NewsController', 'show_by_date',
'match'=>array(
'year'=>'/^\d{4}$/',
'month'=>'/^\d{2}$/'
)
);
Almost identical routes are supported if you ever need them.
/**
* almost identical routes examples, must assigned a matching pattern to the parameters
* if no pattern is assigned, it will match the route defined first.
*/
$route['*']['/news/:id'] = array('NewsController', 'show_news_by_id',
'match'=> array('id'=>'/^\d+$/')
);
$route['*']['/news/:title'] = array('NewsController', 'show_news_by_title',
'match'=>array('title'=>'/[a-z0-9]+/')
);
BACK TO TOP