自定义路由

若想实现复杂的路由,你需要掌握重写路由的方式。 在YY框架中我们提倡使用简单路由进行开发。

简单路由会大大减少开发过程中的配置工作量,代码易读且易于维护。 但是有的时候为了减少代码量,你可能需要把很多请求都指向一个控制器,或者干脆所有请求都指向一个特定的控制器,这个时候你就需要掌握自定义路由了。

YY框架中自定义路由是非常简单的,只需修改配置文件中的路由配置就好,下面详细的为你介绍。

在框架内部定义了一个特殊的路由替换解析器以满足自定义路由的需求:

绝对路由规则

在修改Conf类文件的静态变量routing,例如改为:

/**一般的绝对路由规则*/
public static $routing = array(
    'admin/'=>'system/users/admin/',
    'user'=>'system/users/user',
);

那么在路由请求中:

用户访问:http://www.yyuc.net/admin/ 等同于访问 http://www.yyuc.net/system/users/admin/

用户访问:http://www.yyuc.net/user.html 等同于访问 http://www.yyuc.net/system/users/user.html

前置路由规则

在修改Conf类文件的静态变量routing,例如改为:

/**一般的前置路由规则*/
public static $routing_bef = array(
    'admin/'=>'system/users/admin/',
    'user'=>'system/users/user',
);

那么所有URL地址中以admin/开头的请求都会自动跳转到以system/users/admin/ 开头的请求之中。

用户访问:http://www.yyuc.net/admin/add.html 等同于访问 http://www.yyuc.net/system/users/admin/add.html

用户访问:http://www.yyuc.net/useradmin-3.html?abc=bca 等同于访问 http://www.yyuc.net/system/users/useradmin-3.html?abc=bca

正则表达式的路由规则

有的时候你要匹配的路由内容可能不只是单单的固定记录,这个时候你就要用到正则表达式了:

/**正则表达式的路由规则*/
public static $routing_reg = array(
    //新闻入口
    '/news\/20\d{2}\/index(_\d+)?$/' => 'news/index',
    '/news\/20\d{2}\/\d+\/\S*$/' => 'news/show',
    '/news\/index(_\d+)?$/' => 'news/index',
);

以上的这段规则是网站新闻入口的规则方式:

用户访问:/news/2012/ 会跳转到 news/index.html

用户访问:/news/2012/index_5.html 会跳转到 news/index_5.html

用户访问:/news/2012/35/abc.html 会跳转到 news/show.html

用户访问:/news/ 会跳转到 news/index.html

注意:

路由匹配的顺序是自上而下的:

先进行一般路由匹配,匹配不通过时如果开启了无控制器自动寻找视图功能则先寻找匹配的视图。

如果仍然无法进行匹配再进行绝对路由规则匹配、前置路由规则和正则表达式的路由规则的匹配,直到找到匹配的控制器。

经过以上步骤还是无法找到匹配的控制器的话,则会跳转的404页面。