Development - Routing
ApPHP Framework always analyzes a URL received from the browser by splitting it into two parts:
- Main part: it is the URL including its domain name; in the above example it is
http://www.domain.com/
- Internal part: it is the remaining part following the installation URL; in the above examples it is
page/
, page/view/id/2
, index.php?url=controller/action
, etc.
By default, ApPHP Framework recognizes URLs with the following formats:
Variant 1 (The url GET variable can be retrived in a standard way, urlFormat "get"):
http://hostname/index.php?url=controller/action¶m1=aaa¶m2=bbb¶m3=ccc
Variant 2 (urlFormat "get"):
http://hostname/page/controller/action?param1=aaa¶m2=bbb¶m3=ccc
Variant 3 (urlFormat "path"):
http://hostname/page/controller/action/param1/aaa/param2/bbb/param3/ccc
Variant 4 (You may specify a custom format "shortPath" for URL by creating special definitions in configuration file):
// url manager
'urlManager' => array(
'urlFormat' => 'shortPath', /* get | path | shortPath */
'rules' => array(
/* direct comparison */
'controller/action/value1/value2' => 'controller/action/param1/value1/param2/value2',
/* advanced template comparison: two or more parameters */
'pages/view/(.*?)/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}/param3/{$2}',
'pages/view/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}',
/* simple template comparison */
'page/vew/id/(.*[0-9])+' => 'index/page/id/{$0}',
'page/vew/id/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',
'page/vew/(.*[0-9])+' => 'index/page/id/{$0}',
'page/vew/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',
'page/(.*[0-9])+' => 'index/page/id/{$0}',
'page/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',
),
),
Remember, that rules are checked sequentially until the match rule is found, so you have to order them in a certain way to avoid overlapping.
For example:
// this rule must be defined before
'pages/view/(.*?)/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}/param3/{$2}',
// this rule must be defined after
'pages/view/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}',
Also, for custom format you have to define all appropriate parameters in your Controller.