• 路由功能


    一、路由定义

    在使用路由功能之前,我们需要启用路由。启用路由前提是你的 URL 支持 PATHINFO
    模式或者兼容模式,而 ThinkPHP 默认的就是 PATHINF 模式。只要配置如下启用:

    在 WeiBo/Common/Conf/config.php 中启用路由功能:

    1 'URL_ROUTER_ON'=>true,

    配置路由规则

    1 'URL_ROUTE_RULES'=> array(
    2      //每条键值对,对应一个路由规则
    3 ),

    这里注意: 'URL_ROUTE_RULES' 中的  ROUTE 后面没有r,而 'URL_ROUTER_ON'=>true, 中的 ROUTER 有r。

    PS:由于 ThinkPHP3.2 或以上版本针对模块设置的,所以模块名本身(比如 Home 和
    Admin)是无法路由的。当然这点也无需路由,因为可以通过设置默认模块进行去除。

    1 //设置模块以及默认模块
    2 'MODULE_ALLOW_LIST' => array('Home','Admin'),
    3 'DEFAULT_MODULE' => 'Home', // 默认模块,可以省去模块名输入

    原来需要在地址栏输入 http://localhost/demo39/Home/User/index.html ,现在就可以省去 Home 了。

    路由规则定义的格式为:'路由表达式'=>'路由地址和参数',路由表达式包括规则路
    由和正则路由两种。
    规则表达式例如: blog/:id 
    正则表达式例如: /^blog/(d+)$/ 

    二、规则路由

          配置路由规则:

     1、静态地址路由

    1 'URL_ROUTE_RULES' => array(
    2       'u'=>'User/index',
    3     ),

    这里只要输入: http://localhost/demo39/u 
    对应的原URL: http://localhost/demo39/User/index 

    2、静态地址和动态地址结合路由

    1 'URL_ROUTE_RULES' => array(
    2        'u/:id'=>'user/index',
    3   ),

    这里只要输入: http://localhost/demo39/u/5 
    对应的原URL: http://localhost/demo39/User/index/id/5 
    这里的5其实就是传递的id值,通过 $_GET['id'] 获取,用系统来获取则是 {$Think.get.id} 。

    3、静态地址和动态地址结合路由

    1 'URL_ROUTE_RULES' => array(
    2        'u/:type/:attr/:list'=>'User/index',
    3   ),

    这里只要输入: http://localhost/demo39/u/5/6/7 
    对应的原URL: http://localhost/demo39/User/index/type/5/attr/6/list/7 
    这里的567分别对应了动态type、attr、list

    4、全动态地址

    1 'URL_ROUTE_RULES' => array(
    2        ':u/:id'=>'User/index',
    3   ),

    这里只要输入: http://localhost/demo39/u/5 
    对应的原URL: http://localhost/demo39/User/index/id/5 
    这里的u和5都是可以随便输入的

    5、数字约束

    1 'URL_ROUTE_RULES' => array(
    2       'u/:idd'=>'User/index',
    3   ),

    给id后面加上一个正则的d表示只能传递数字

    6、支持函数

    1 'URL_ROUTE_RULES' => array(
    2     'u/:idd|md5'=>'User/index',
    3   ),

    给id进行md5加密

    7、可选传参

    1 'URL_ROUTE_RULES' => array(
    2     'u/[:idd]'=>'User/index',
    3   ),

    这样的话,参数处在可选状态

    8、$表示后面不允许再有东西

    1 'URL_ROUTE_RULES' => array(
    2     'u/:id$'=>'User/index',
    3   ),

    三、正则路由

    正则路由也就是采用正则表达式定义路由的一种方式,很多复杂的路由设置无法通过规则路由设置,则可以使用正则路由。

    1、正则路由

    1 'URL_ROUTE_RULES' => array(
    2     '/^u/(d{2})$/'=>'User/index?id=:1',
    3   ),

    后面用普通的 URL 模式对应规则,不能使用'User/index/id/:1',
    这里的:1 表示对应第一个正则圆括号。

    2、正则路由也支持函数

    1 'URL_ROUTE_RULES' => array(
    2    '/^u/(d{2})$/'=>'User/index?id=:1|md5',
    3   ),

    四、静态路由

    静态路由其实就是规则路由的简化版(又称 URL 映射),它就是撇除了动态路由的功能。

    配置静态路由

    1 'URL_MAP_RULES'=> array(
    2         'u/i'=>'User/index',
    3 ),

    PS:由于性能问题,ThinkPHP 把 MAP 替换为 ROUTER,专门处理静态路由。

    五、闭包支持

    有时,我们并非需要执行控制器的操作方法。可以用闭包定义一些特殊的需求的路由。

    配置闭包定义,不执行控制器方法

    1、规则路由

    1 'URL_ROUTE_RULES' => array(
    2    'u/:id'=>function($id) {
    3         echo "id:".$id;
    4     },
    5   ),

    2、正则路由

    1 'URL_ROUTE_RULES' => array(
    2    '/^u/(d{2})$/'=>n function ($id) {
    3      echo 'id:'.$id;
    4           },
    5   ),
  • 相关阅读:
    ActiveX控件的注册和反注册
    谷歌浏览器调用activex控件方法
    VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别
    DirectX介绍(转)
    最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)(转)
    统计Visual Studio项目的代码行数
    【Sqlite3】sqlite_sequence表(转)
    linuxunix系统下的字符操作
    tif
    字符串截取
  • 原文地址:https://www.cnblogs.com/jacson/p/4512858.html
Copyright © 2020-2023  润新知