1 基础:路由表达式
知识梳理
0 route目录下 路由文件名可以随便起 route.php api.php 都是可以的
1 多应用下路由 模块名不能省略
2 设置了动态路由格则 参数必须传入 不传会报错
3 动态变量两种书写格式: :id 和 <id> 推荐使用后者,会自动绑定到操作方法的参数上
4 可选参数只能放在路由规则的最后,如果在中间使用了以后,后面的变量都变成了可选参数。
1)最基础的路由定义
Route::rule('路由表达式','路由地址','请求类型');
Route::rule('/','Index/index','get|POST'); //第三个参数 请求类型不区分大小写
第三个参数默认是 * any() 支持所有类型;
2)请求的快捷方式 [ 手册推荐 ]
类型 描述 快捷方法
GET get请求 get()
POST post请求 post()
PUT put请求 put()
DELETE delete请求 delete()
PATCH patch请求 patch()
* 任何请求类型 any()
Route::快捷方式名('路由表达式','路由地址');
Route::get('news/:id','Index/news');
3)强制路由
在route.php配置文件只能修改 'url_route_must' => true,
开启强制后:必须给每一个访问定制路由规则 否则抛出异常
4)改变首页地址
1、路由格则
Route::rule('/','News/index');
2、访问后台首页
http://www.blog.com/admin/
3、浏览器返回
我是新闻列表页 [ 路由设置成功 ]
4、控制器文件
<?php
namespace app\admin\controller;
class News
{
public function index(){
return '我是新闻列表页';
}
}
5)路由标识
使用场景:在模板页如何做超链接 如何得到呢?
1 不定义标识
return url('Index/news',['id' => 5 ]);
2 定义标识
Route::rule('news/:id','Index/news')->name('news');
return url('news',['id'=>5]);
规则表达式
1 闭包输入
2 静态规则
3 动态规则
4 动静组合
4 多个参数
5 可选变量
6 完全匹配
7 隐式传参
二 规则表达式
1)路由规则
use think\facade\Route; Route::rule('hello',function (){return '李白';});//1 闭包传入 http://www.blog.com/admin/hello Route::get('/','Index/index');//2 访问首页 http://www.blog.com/admin/ Route::get('index','Index/index');//3 静态规则 http://www.blog.com/admin/index Route::get('news/:id', 'Index/news');//4 动态静态结合 单个参数 http://www.blog.com/admin/news/5.html http://www.blog.com/admin/news 不传id值会报错 Route::get('time/:year/:month/:day','Index/time');//5 动态静态结合 多个参数 http://www.blog.com/admin/time/10/23/52.html Route::get(':user/:id', 'Index/user');//6 全动态规则 http://www.blog.com/admin/abc/100.html 输出 abc100 http://www.blog.com/admin/hao/100.html 输出 hao100
规则表达式:静态 动态 静态动态结合
动态变量两种书写格式: :id <id> 推荐使用后者,会自动绑定到操作方法的参数上
2)控制器页
<?php namespace app\admin\controller; class Index { //1 后台首页 public function index(){ return '我是后台首页'; } //4 动态静态结合 单个参数 public function news($id = 0){ return '新闻的ID是:'.$id; } //5 动静态结合 多个参数 public function time($year,$month,$day){ return '时间是'.$year.'年'.$month.'月'.$day.'天'; } //6全动态地址 public function user($user,$id){ return $user.$id; } }
二 可选变量 [ 用中括号包含 ]
Route::get('news/[:id]', 'Index/news');
以下都可以成功访问
http://www.blog.com/admin/news
http://www.blog.com/admin/news/5
http://www.blog.com/admin/news/5.html
要点:可选参数只能放在路由规则的最后,如果在中间使用了以后,后面的变量都变成了可选参数。
三 完全匹配 [ 规则后面加 $ ]
Route::get('news/:id$', 'Index/news'); //完全匹配模式
http://www.blog.com/admin/news/dd //匹配成功
http://www.blog.com/admin/news/id/5 //匹配不成功
如果要进行全局完全匹配 修改配置文件
在config/route.php 文件里修改 'route_complete_match' => true,
四 额外参数传递 append() 方法
1、路由额外传参
Route::get('/','Index/index')->append(['name'=>'jack']); //隐式传参
2、控制器打印参数
public function index(){
var_dump(Request::param());
return '我是后台首页';
}
3、路由访问:http://www.blog.com/admin/
4、返回结果:array(1) { ["name"]=> string(4) "jack" } 我是后台首页
五 路由标识
打发打发
六 强制路由

浙公网安备 33010602011771号