controller

url路由

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

路由接口类 - base_interface_router

路由的接口类定义了三个方法

  • __construct - 构造函数
  • gen_url - 生成url

    根据传入的参数:app,控制器,方法及变量, 产生相应的访问url

  • dispatch - 调度根据传入的PATH_INFO或POST或GET, 取得app名,控制器,方法及变量,并调用相应的app的控制器下的方法

默认的路由 - base_router

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