ThinkPHP02:路由

news/2025/2/9 5:01:27/

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);
    

http://www.ppmy.cn/news/34436.html

相关文章

功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂

咱们直接开门见山&#xff0c;没错我的粉丝向我投来了喜报&#xff0c;从功能测试转型测试开发&#xff0c;进入大厂&#xff0c;摆脱最初级的点点点功能测试&#xff0c;拿到高薪&#xff0c;遗憾的是&#xff0c;这名粉丝因为个人原因没有经过指导就去面试了&#xff0c;否则…

西安石油大学C语言期末重点知识点总结

大一学生一周十万字爆肝版C语言总结笔记 是我自己在学习完C语言的一次总结&#xff0c;尽管会有许多的瑕疵和不足&#xff0c;但也是自己对C语言的一次思考和探索&#xff0c;也让我开始有了写作博客的习惯和学习思考总结&#xff0c;争取等我将来变得更强的时候再去给它优化出…

Java四种内部类(看这一篇就够了)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

【C++学习】继承

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; C是面向对象的编程语言&#xff0c;它有很多的特性&#xff0c;但是最重要的就是封装&#xff0c;继承…

机器学习基础知识

1、过拟合&#xff08;Overfitting&#xff09;&欠拟合&#xff08;Underfitting&#xff09; training error&#xff1a;模型在训练中的误差 generalization error&#xff08;泛化误差&#xff09;&#xff1a;模型对于新的数据上运行产生的误差 过拟合&#xff1a;记…

一篇教你学会YOLOv5,5.0或6.2版本NCNN模型部署安卓端。

这里写目录标题一、引言二、准备工作1、Android Studio2、安装vs20193、ncnn-yolov5-android源码onnx转ncnn模型三、模型部署1、修改export文件&#xff0c;转化onnx模型2、 下载源码一、引言 想实现下在Android上部署个深度学习模型&#xff0c;本文可以同时部署5.0或6.0版本…

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

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

cjson文件格式介绍

cjson是一种轻量级的JSON解析库&#xff0c;它支持将JSON格式的数据转换为C语言中的数据结构&#xff0c;同时也支持将C语言中的数据结构转换为JSON格式的数据。cjson的文件格式是指在使用cjson库时&#xff0c;将JSON格式的数据存储在文件中&#xff0c;然后通过cjson库读取文…