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" } 我是后台首页

五 路由标识

打发打发

 

六 强制路由

 

 

posted @ 2021-01-12 16:31  棉花糖88  阅读(330)  评论(0)    收藏  举报