> 文章列表 > ThinkPHP02:路由

ThinkPHP02:路由

在ThinkPHP框架中,路由系统是连接前端请求与后端逻辑的桥梁,是每位开发者都必须掌握的技能。你是否曾经困惑过,为何路由在项目中如此重要?其实,路由不仅仅是简单的URL映射,它更是你项目的导航系统。假设你的项目是一艘大船,那么路由就是它的舵,指引着每一次请求驶向正确的方向。

今天,我们将从九个关键点入手,为你揭开ThinkPHP路由的神秘面纱。我们不仅会讨论路由的定义和配置文件的位置(比如config/route.php),还会深入探讨变量规则,如w+和d+是什么含义。我们还会学习如何使用路由地址定义多级控制器,以及如何通过路由参数来设置检测规则,如检测URL是否为HTTPS。此外,我们还将了解路由分组如何帮助你管理复杂项目,以及MISS路由在处理未匹配请求时的神奇作用。

你是否曾经因为URL生成感到头疼?别担心,我们也会详细讲解如何生成优雅的URL,并探讨资源路由和注解路由的优势。通过这篇文章,你不仅能学会如何使用这些高级功能,还能理解它们在项目中的实际应用价值。

无论你是刚开始接触ThinkPHP的新手,还是已经有一定经验的开发者,这篇文章都会为你提供新的视角和实用技巧。让我们一起,用路由的力量,构建更高效、更灵活的应用吧!

ThinkPHP02:路由

ThinkPHP02:路由

  • 一、路由定义
  • 二、变量规则
  • 三、路由地址
  • 四、路由参数
  • 五、路由分组
  • 六、MISS
  • 七、资源路由
  • 八、注解路由
  • 九、URL生成

一、路由定义

  • 路由默认开启,在 config/app.php 中可以关闭路由。

  • 路由配置在 config/route.php 中,路由定义在 route/app.php 中。

  • rule()默认请求是any。

    Route::rule("details/:id", "Address/details", "GET|POST");
    
  • 其他的有 get、post等。

    Route::get("details/:id", 'Address/details');
    

二、变量规则

  • 系统默认路由变量规则是 \\w+,即字母、数字、中文和下划线,在 config/route.php 中可更改。

  • 在路由中设置变量规则。

    Route::get("details/:id", 'Address/details')->pattern(["id" => '\\d+']);
    
  • 动态组合拼装,地址和参数都是动态的。

    Route::get("hello-<name>-<id>", 'Hello:name/details')->pattern(["id" => '\\d+']);
    
  • 闭包路由可以通过URL直接执行,而不需要控制器和方法,也支持传递参数和动态规则。

    Route::get('think/:name', function ($name) {return 'hello, '.$name.'!';
    });
    

三、路由地址

  • 路由地址一般为:控制器/操作方法。

  • 多级控制器路由。

    Route::rule('blog/:id', 'group.Blog/details');
    
  • 完整路径

    Route::rule('ds/:id', "\\app\\controller\\Address@details");
    
  • 路由重定向

    Route::redirect("ds/:id", "http://localhost:8000", 302);
    

四、路由参数

  • 设置路由时,可以设置相关的方法,实施匹配检测和行为执行。

  • ext() 方法用于检测URL后缀、强制所有URL后缀,denyExt() 禁止使用后缀。

    Route::get("details/:id", 'Address/details')->ext('html|shtml');
    
  • https() 方法用于检测是否为 https 协议。

    Route::get("details/:id", 'Address/details')->https();
    
  • domain() 方法检测当前域名是否匹配,完整域名和子域名均可。

    Route::get("details/:id", 'Address/details')->domain("localhost");
    
  • ajax/pjax/json 用于检测当前的页面是否是以上请求方式。

    Route