url路由: 根据进来的url, 调用相应控制器的方法
系统支持自定义url路由处理类, 根据自定义的url路由类, 可以解析不同风格的url, 进行调度
例如:
首先引入一个概念
PATH_INFO: PATH_INFO是一个CGI 1.1的标准,经常用来做为传参载体 path_info是跟在script_path后的扩展路径信息. 服务器将此信息放到PATH_INFO变量中 Ecos需要Web server支持PATH_INFO. 例如: http://www.test.com/index.php/dummy/college/ script_path: /index.php path_info: /dummy/college/ 想了解详细请看:http://www.perlfect.com/articles/cgi_env.shtml
PATH_INFO的引入是为了seo的考虑, 并且方便进行url rewrite.
接下来进入主题,看看路由配置的范例 config/mapper.php
<?php
$urlmap = array(
'/' => array('app' => 'base'), // key:'/'代表路由路径, value:'base'代表,提供路由类的app.
'/admin' => array('app' => 'desktop'),
'/front' => array('app' => 'notebook'),
);
路由路径: 访问url的PATH_INFO的第一层, 默认为'/' 上边的例子 '/' '/admin' '/front',为路由路径 例如: http://www.test.com/index.php/admin, 路由路径: '/admin'
当前请求过程中的主app: 通过url解析得来的路由路径, 取得主app. 由主app来提供路由处理类. 根据此app的名称, 找取 {$app_name}_router 类, 如果找不到默认用 base_router类进行路由处理 例如: url http://test-server/index.php/admin/ctl_name/act_name/p_k/p_v 通过url解析倒的路由路径为: /admin 路由配置如下 <?php $urlmap = array( '/admin' => array('app' => 'desktop'), ); 通过路由配置取得提供路由处理的app: desktop 因此系统在路由分发的时候会调用desktop_router类, 进行路由处理.
为了解释清楚路由调度的过程, 整个流程做了相应的简化, 只关注路由调度流程
sh: 1: dot: not found
sh: 1: dot: not found
路由的接口类定义了三个方法
根据传入的参数:app,控制器,方法及变量, 产生相应的访问url
http://test-server//index.php/{$app_name}/{$ctl_name}/{$act_name}/{$param_k1}/{$param_v1}/{$param_k2}/{$param_v2}/}
app: $app_name
控制器: $ctl_name
动作: $act_name
参数: array($param_k1=>$param_v1, $param_k2=>$param_v2)
sh: 1: dot: not found