当前位置: 首页 > news >正文

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&#xff1a;路由一、路由定义二、变量规则三、路由地址四、路由参数五、路由分组六、MISS七、资源路由八、注解路由九、URL生成一、路由定义 路由默认开启&#xff0c;在 config/app.php 中可以关闭路由。 路由配置在 config/route.php 中&#xff0c;路由定义在 r…...

制作简单进销存管理系统(C#)

实验三&#xff1a;制作简单进销存管理系统 任务要求&#xff1a; 在进销存管理系统中&#xff0c;商品的库存信息有很多种类&#xff0c;比如商品型号、商品名称、商品库存量等。在面向对象编程中&#xff0c;这些商品的信息可以存储到属性中&#xff0c;然后当需要使用这些…...

css总结9(过渡和2D变换)

目录 过渡 2D变换 3D变换 过渡 属性结构图 过渡补充 ### 过渡多个元素样式属性 transition:style1 duration , style2 duration,...; ### 过渡所有属性 transition: all duration; 简单示例 ### 移入时改变长度且加入过渡效果 div { width:100px; height:100px; …...

SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】

SpringCloud 大型系列课程正在制作中&#xff0c;欢迎大家关注与提意见。 程序员每天的CV 与 板砖&#xff0c;也要知其所以然&#xff0c;本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 1 项目准备 SpringBoot 整合 RabbitMQ 消息队…...

【python进阶】序列切片还能这么用?切片的强大比你了解的多太多

&#x1f4da;引言 &#x1f64b;‍♂️作者简介&#xff1a;生鱼同学&#xff0c;大数据科学与技术专业硕士在读&#x1f468;‍&#x1f393;&#xff0c;曾获得华为杯数学建模国家二等奖&#x1f3c6;&#xff0c;MathorCup 数学建模竞赛国家二等奖&#x1f3c5;&#xff0c…...

[数据结构]直接插入排序、希尔排序

文章目录排序的概念和运用排序的概念排序运用常见的排序算法常见的排序算法直接插入排序希尔排序性能对比排序的概念和运用 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操…...

CNN、LeNet、AlexNet、VGG、GoogLeNet、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等的关系

卷积神经网络的现状1943年美国数学家提出人工智能1949年心理学家建立神经元模型1957年弗兰克提出 感知器人工神经网络模型1980年建立多层感知器模型1984日本学者提出卷积神经网络原始模型神经感知机1998年提出LeNet-5卷积神经网络&#xff0c;并发展了其在音符和字符上的优势20…...

IO-day1-(fscanf、fprintf.........)

作业一、有一个usr.txt的文件&#xff0c;其中存储着用户的账户和密码&#xff0c;格式如下&#xff1a;zhangsan aaaalisi bbbbb空格前面是账户&#xff0c;空格后面是密码&#xff0c;一行一个账户、密码要求如下&#xff1a;从终端获取一个账户名和密码判断是否能够登录成功…...

C++类和对象(上篇)

目录 1.类的定义 2.类的访问限定符及封装 2.1类的访问限定符 2.2封装 3.类的作用域 4.类的实例化 5.类的大小 6.this 指针 1.类的定义 class className {// 类体&#xff1a;由成员函数和成员变量组成}; // 一定要注意后面的分号 class为定义类的关键字&#xff0c;Clas…...

解决Xshell无法连接Kali Linux 2020.1(2019.3)版本

使用Xshell远程终端工具连接虚拟机的Kali Linux却提示连接不上原因&#xff1a;Kali Linux默认没有打开SSH远程登录&#xff0c;SSH就是一种网络协议&#xff0c;用于加密的远程登录&#xff0c;所以在没有打开SSH协议之前是无法使用Xshell连接Kali Linux的。解决办法&#xff…...

项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?

文章标题&#xff1a;Polysaccharides from Enteromorpha prolifera alleviate hypercholesterolemia via modulating the gut microbiota and bile acid metabolism 发表期刊&#xff1a;Food & Function 影响因子&#xff1a;6.317 作者单位&#xff1a;福建医科大…...

Linux使用宝塔面板搭建网站,并内网穿透实现公网访问

文章目录前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置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接口的一个实现类&#xff08;HashMap实现了Map的接口&#xff09;&#xff0c;它具有Map的特点。HashMap的底层是哈希表结构。 Map是用于保存具有映射关系的数据集合&#xff0c;它具有双列存储的特点&#xff0c;即一次必须添加两个元素&#xf…...

面试--每日一经

操作系统 死锁 死锁&#xff1a;是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。   死锁的四个必要条件 互斥条件&#xff1a;一个资源每次只能被一个进…...

JavaSE进阶之(十六)枚举

十六、枚举16.1 背景16.2 枚举类型16.3 EnumSet 和 EnumMap01、EnumSet02、EnumMap16.1 背景 在 Java 语言中还没有引入枚举类型之前&#xff0c;表示枚举类型的常用模式是声明一组 int 类型的常量&#xff0c;常常用的就是&#xff1a; public static final int SPRING 1; …...

全同态加密:TFHE

参考文献&#xff1a; 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 生产消息&#xff0c;用消费者客户端 API 从 Kafka 读取这些消息。 Kafka 使用 Zookeeper 保存元数据信息。 Kafka 0.9 版本之前&#xff0c;除了 broker 之外&#xff0c; 消费者也会使用…...

【JavaEE】线程的状态

哈喽&#xff0c;大家好~我是保护小周ღ&#xff0c;本期为大家带来的是 Java 多线程的 线程的状态&#xff0c;New 新建状态&#xff0c;Runnable 运行状态&#xff0c;Blocked 阻塞状态&#xff0c;waiting 等待状态&#xff0c;Time_Waiting 超时等待状态&#xff0c;Termin…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的API…...

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…...

汇编语言学习(三)——DoxBox中debug的使用

目录 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 二、debug是什么 三、debug中的命令 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 链接&#xff1a; https://pan.baidu.com/s/1IbyJj-JIkl_oMOJmkKiaGQ?pw…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2

----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导&#xff0c;采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...

Go 并发编程基础:select 多路复用

select 是 Go 并发编程中非常强大的语法结构&#xff0c;它允许程序同时等待多个通道操作的完成&#xff0c;从而实现多路复用机制&#xff0c;是协程调度、超时控制、通道竞争等场景的核心工具。 一、什么是 select select 类似于 switch 语句&#xff0c;但它用于监听多个通…...

《开篇:课程目录》

大家好&#xff01;我是一名.NET技术开发者&#xff0c;长期以来积累了比较多的项目实战经验&#xff0c;现在把它分享给大家&#xff0c;希望能够帮助到大家&#xff0c;同时为.NET社区提供一份力量&#xff0c;让更多的开发者参与进来。 要讲解的课程如下&#xff1a; 《介绍…...