路由配置
LMLPHP的路由采用正则匹配。示例如下:
<?php
// after require LMLPHP
// Route rule
$myrouter = array(
'/^(?:\/index\.php)?\/test\/([a-z_\-]+)\/?([\d]*)/i' => array(
'param'=>array('name','id'),
// you can get value through $_GET['name'],$_GET['id']
// 'callback'=>array('test','hello'),
// or 'callback'=>array('func') ,
// or 'callback'=>array('class::func') since php 5.2.3
// or 'callback'=>array(__NAMESPACE__.'\class::func') since php 5.3
// if callback is set, m,a will not work.
'm'=>'test', // module name
'a'=>'index' // action name
)
);
// start app
lml()->app()->addRouter($myrouter)->run();
路由的配置采用数组的形式,key为正则,value对应一个数组。value中含有四个参数可以设置,下面对参数进行解释:
param 数组中的参数对应正则中子匹配项匹配的值,他们是一一对应的关系,采用$_GET['参数名']的方式获取值。
callback 回调函数对应的数组若是一个参数,则调用的是方法名;若是两个参数,第一个是类名,第二个是静态方法名,则调用类的静态方法。
如果设置了callback,参数"m"和"a"将不会生效。参数"m"对应的是模块控制器类名(不包含前缀module),参数"a"对应的是控制器的方法名。
上面的例子匹配URL为"/test/英文字母-_"或"/test/英文字母-_/数字"时,调用ModuleTest的index方法。
上面的例子如果将callback的注释打开,则调用类test的静态方法hello()。
param 数组中的参数对应正则中子匹配项匹配的值,他们是一一对应的关系,采用$_GET['参数名']的方式获取值。
callback 回调函数对应的数组若是一个参数,则调用的是方法名;若是两个参数,第一个是类名,第二个是静态方法名,则调用类的静态方法。
如果设置了callback,参数"m"和"a"将不会生效。参数"m"对应的是模块控制器类名(不包含前缀module),参数"a"对应的是控制器的方法名。
上面的例子匹配URL为"/test/英文字母-_"或"/test/英文字母-_/数字"时,调用ModuleTest的index方法。
上面的例子如果将callback的注释打开,则调用类test的静态方法hello()。
后置路由配置
后置路由系路由未匹配上,控制器未找到,显示层也未找到,然后执行的最后一条路由。在这里您可以返回404等操作。如下示例:
<?php
$lastRouter = array('last');
lml()->app()->addRouter($myrouter)->addLastRouter($lastRouter)->run();
function last(){
// handle not found
}
上面的例子定义了lastRouter,当路由、控制器、显示层均为找到时然后执行方法last。
应用举例
细心的童鞋,一定会发现,小米的官网有时候会在首页做活动,我们访问http://www.mi.com和http://www.mi.com/index.php展示的内容是完全不一样的。LMLPHP可以轻松实现这种不一样的展示的效果。如下代码示例:
<?php
// Route rule
$myrouter = array(
// ...
'/^\/$/'=> array(
'callback'=>array('entrance'),
),
'/^\/index\.php$/'=> array(
'callback'=>array('entrance_index')
)
);
将上面的路由配置加入,即可实现。LMLPHP强大的路由功能等待您来发掘^_^。