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::get("details/:id", 'Address/details')->ajax(); -
filter()用于检测额外参数,额外参数可以表单提交。Route::get("details/:id", 'Address/details')->filter(['id' => 5, "type" => 1]); -
append()方法用于追加额外参数。Route::get("details/:id", 'Address/details')->append(['status' => 1]); -
allowCrossDomain()方法可以解决跨域请求。oute::get("details/:id", 'Address/details')->allowCrossDomain(["Access-Control-Allow-Origin" => "*" ]); -
option()用于配置多个参数Route::get("details/:id", 'Address/details')->option(['ext' => 'html','https' => true ]);
五、路由分组
-
路由分组可以将相同前缀的路由合并分组,简化路由定义。
Route::group("address", function () {Route::rule("ds/:id", "/details");Route::rule("rd/:id", "/read"); })->prefix('Address'); -
路由规则定义的文件,加载时会解析消耗较多资源,可以在 config/route.php 中开启延迟解析,在匹配的时候才会注册解析。
'url_lazy_route' => true,
六、MISS
-
MISS在匹配不到相应规则时会自动跳转到 MISS。
-
全局MISS。
# app/controller/Error.php public function miss() {return "404 Not Found"; }# route/app.php Route::miss('public/miss'); -
分组MISS
# app/controller/Address.php public function miss() {return '404 Address'; }# route/app.php Route::group("address", function () {Route::rule("ds/:id", "/details");Route::rule("rd/:id", "/read");Route::miss("miss"); })->prefix('Address');
七、资源路由
-
系统提供了快速生成资源控制器的命令。
php think make:controller Blog -
注册资源路由,注册成功后,会自动提供CURD方法,无需手动注册,请求方式有GET、POST、PUT、DELETE。
Route::resource('blog', 'Blog');# 自动注册 http://localhost:8000/blog/ (index) http://localhost:8000/blog/5 (read) http://localhost:8000/blog/5/edit (edit) -
默认参数采用id名称。也可以自定义
# route/app.php Route::resource('blog', 'Blog')->vars(['blog' => 'blog_id']);# app/controller/Blog.php public function read($blog_id) {return "显示指定的资源: ". $blog_id; } -
only()用于限定资源方法,except()用于排除系统提供的资源方法。Route::resource('blog', 'Blog')->only(['index', 'read']); Route::resource('blog', 'Blog')->except(['delete', 'update']); -
rest()更改系统给予的默认方法,放在resource方法前面。资源路由的标识不可更改,但生成的路由规则和对应操作方法可以修改。# rest方法要放在resource前面 Route::rest([# 资源路由标识 => 请求方式,请求地址,操作方法'save' => ["POST", "/:id/save", "save"],'update' => ["PUT", "/:id", "update"], ]); Route::resource('blog', 'Blog'); -
使用资源嵌套路由,可以让上级资源对下级资源进行操作。
# app/controller/Comment.php class Comment {public function read($id, $blog_id) {return "评论ID:" . $id . ",博客ID:" . $blog_id;}public function edit($id, $blog_id) {return "评论ID:" . $id . ",博客ID:" . $blog_id;} }# route/app.php 注册资源嵌套路由 Route::resource("blog.comment", "Comment");# 路由规则 http://localhost:8000/blog/:blog_id/comment/:id
八、注解路由
-
注解路由是在注解中写的路由,项目很简单时使用。
-
路由注解方式,并非系统默认支持,而是可选方案,需要额外安装扩展。
composer require topthink/think-annotation -
在控制器中写路由,必须使用双引号。单引号不能解析
# app/controller/Address.php use think\annotation\Route;class Address {/*** @param $id* @return string* @route("ds/:id", method="GET", https=1);*/public function details($id) {return '详情id:' . $id;} } -
注解模式也支持资源路由和分组。
use think\annotation\Route\Resource;/*** Class Blog* @package app\controller* @Resource("blog");*/ class Blog {... }
九、URL生成
-
使用
buildUrl()获取路由的URL地址。默认后缀是html,可以使用suffix()更改。使用domain()可以生成加上域名的URL。Route::buildUrl("Url/details", ['id' => 8])->suffix('shtml')->domain(true); -
可以给路由定义一个别名,生成URL时使用别名调用。
-
可以直接使用路由地址生成URL。
-
助手函数
url()可以直接代替Route::buildUrl()url(ds/5)->domain(true);
相关文章:
ThinkPHP02:路由
ThinkPHP02:路由一、路由定义二、变量规则三、路由地址四、路由参数五、路由分组六、MISS七、资源路由八、注解路由九、URL生成一、路由定义 路由默认开启,在 config/app.php 中可以关闭路由。 路由配置在 config/route.php 中,路由定义在 r…...
制作简单进销存管理系统(C#)
实验三:制作简单进销存管理系统 任务要求: 在进销存管理系统中,商品的库存信息有很多种类,比如商品型号、商品名称、商品库存量等。在面向对象编程中,这些商品的信息可以存储到属性中,然后当需要使用这些…...
css总结9(过渡和2D变换)
目录 过渡 2D变换 3D变换 过渡 属性结构图 过渡补充 ### 过渡多个元素样式属性 transition:style1 duration , style2 duration,...; ### 过渡所有属性 transition: all duration; 简单示例 ### 移入时改变长度且加入过渡效果 div { width:100px; height:100px; …...
SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 1 项目准备 SpringBoot 整合 RabbitMQ 消息队…...
【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
📚引言 🙋♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,…...
[数据结构]直接插入排序、希尔排序
文章目录排序的概念和运用排序的概念排序运用常见的排序算法常见的排序算法直接插入排序希尔排序性能对比排序的概念和运用 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操…...
CNN、LeNet、AlexNet、VGG、GoogLeNet、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等的关系
卷积神经网络的现状1943年美国数学家提出人工智能1949年心理学家建立神经元模型1957年弗兰克提出 感知器人工神经网络模型1980年建立多层感知器模型1984日本学者提出卷积神经网络原始模型神经感知机1998年提出LeNet-5卷积神经网络,并发展了其在音符和字符上的优势20…...
IO-day1-(fscanf、fprintf.........)
作业一、有一个usr.txt的文件,其中存储着用户的账户和密码,格式如下:zhangsan aaaalisi bbbbb空格前面是账户,空格后面是密码,一行一个账户、密码要求如下:从终端获取一个账户名和密码判断是否能够登录成功…...
C++类和对象(上篇)
目录 1.类的定义 2.类的访问限定符及封装 2.1类的访问限定符 2.2封装 3.类的作用域 4.类的实例化 5.类的大小 6.this 指针 1.类的定义 class className {// 类体:由成员函数和成员变量组成}; // 一定要注意后面的分号 class为定义类的关键字,Clas…...
解决Xshell无法连接Kali Linux 2020.1(2019.3)版本
使用Xshell远程终端工具连接虚拟机的Kali Linux却提示连接不上原因:Kali Linux默认没有打开SSH远程登录,SSH就是一种网络协议,用于加密的远程登录,所以在没有打开SSH协议之前是无法使用Xshell连接Kali Linux的。解决办法ÿ…...
项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?
文章标题:Polysaccharides from Enteromorpha prolifera alleviate hypercholesterolemia via modulating the gut microbiota and bile acid metabolism 发表期刊:Food & Function 影响因子:6.317 作者单位:福建医科大…...
Linux使用宝塔面板搭建网站,并内网穿透实现公网访问
文章目录前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…...
基于深度学习方法与张量方法的图像去噪相关研究
目录 1 研究现状 1.1 基于张量分解的高光谱图像去噪 1.2 基于深度学习的图像去噪算法 1.3 基于深度学习的高光谱去噪 1.4 小结 2 基于深度学习的图像去噪算法 2.1 深度神经网络基本知识 2.2 基于深度学习的图像去噪网络 2.3 稀疏编码 2.3.1 传统稀疏编码 2.3.2 群稀…...
Java基础知识之HashMap的使用
一、HashMap介绍 HashMap是Map接口的一个实现类(HashMap实现了Map的接口),它具有Map的特点。HashMap的底层是哈希表结构。 Map是用于保存具有映射关系的数据集合,它具有双列存储的特点,即一次必须添加两个元素…...
面试--每日一经
操作系统 死锁 死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 死锁的四个必要条件 互斥条件:一个资源每次只能被一个进…...
JavaSE进阶之(十六)枚举
十六、枚举16.1 背景16.2 枚举类型16.3 EnumSet 和 EnumMap01、EnumSet02、EnumMap16.1 背景 在 Java 语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组 int 类型的常量,常常用的就是: public static final int SPRING 1; …...
全同态加密:TFHE
参考文献: Cheon J H, Stehl D. Fully homomophic encryption over the integers revisited[C]//Advances in Cryptology–EUROCRYPT 2015: 34th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Sofia, Bulgaria, …...
【计算机二级】综合题目
计算机二级python真题 文章目录计算机二级python真题一、《大学慕课 两问 》二、综合应用题——价值链三、基本操作题 ——信息输出一、《大学慕课 两问 》 附件中的文件data.txt 是教育部爱课程网中国大学MOOC平台的某个 HTML页面源文件,里面包含了我国参与MOOC建设的一批大学…...
初识Kafka
介绍 Kafka Kafka 是一款基于发布与订阅的消息系统。 用生产者客户端 API 向 Kafka 生产消息,用消费者客户端 API 从 Kafka 读取这些消息。 Kafka 使用 Zookeeper 保存元数据信息。 Kafka 0.9 版本之前,除了 broker 之外, 消费者也会使用…...
【JavaEE】线程的状态
哈喽,大家好~我是保护小周ღ,本期为大家带来的是 Java 多线程的 线程的状态,New 新建状态,Runnable 运行状态,Blocked 阻塞状态,waiting 等待状态,Time_Waiting 超时等待状态,Termin…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
