《Thinkphp5入门系列课程》第八课:路由(一)

Thinkphp5视频教程

通过本文你可以学到下面几点:

  • 普通模式路由
  • 自定义模式路由
  • thinkphp5 两种路由模式的留言板应用

普通模式的路由

普通模式的路由集成自 tp3.2 框架,看过前面文章的同学会知道 thinkphp5 的目录结构是这样的:

application
|----index
|----|----controller
|----|----|----Index.php

Index.php 内容:

我们都知道 MVCC 也就是 Controller 负责中间调度,也就是我们所有的访问都是经过 Controller 的,那么我们怎么访问上面 Index.php 文件中的 index 方法呢? thinkphp5 的普通模式路由是这样的:

http(s)://domain.com/index(模块名)/index(控制器)/index(方法名)

所以,上面的 index 方法的 URL 访问地址是:

http://domain.com/index/index/index
《Thinkphp5入门系列课程》第八课:路由(一)_第1张图片
t01c8d746bccfcba3ab.jpg

普通模式就这样咯,很简单吧 ^ - ^。

自定义模式路由

从名字就可以看出,自定义模式的路由就是 URL 的格式是我们自定义的,这样不管从 URL 的简洁或者隐藏真实 action 等方面都更加自由。接下来就详细介绍下自定义模式路由的使用。

thinkphp5 支持混合路由模式,也就是普通模式和自定义路由模式可以混合使用,但是在这里作者强烈不推荐此种写法,或许初期写项目并不觉得麻烦,但是不管是后期的维护还是开发团队新成员的加入都会进入此坑中。所以,作者建议要不使用普通模式,要不使用自定义路由模式,只能二选其一!

首先呢,我们需要配置下文件 application/config.php

'url_route_on' =>  true,
'url_route_must' =>  true,
'route_complete_match'  => true,

上面是开启自定义路由并强制使用自定义路由模式(也就是禁止使用普通模式了)且强制完整匹配哦,接下来我们访问 Controller 的方法都需要手动的指定路由映射咯。

《Thinkphp5入门系列课程》第八课:路由(一)_第2张图片
t01d3533c79d87edded.jpg

thinkphp5 提供了很多种路由注册方法,但是作者今天在这里只介绍下面几种方法,因为作者认为其他的方法并没有什么卵用,不过这仅仅是作者的观点,如想深入的了解,你懂的!

注意:下面的 Route 是在声明 use think\Route 后使用的

注册方法 解释
Route::get('url_name', 'controller@action') url_nameGET 方法映射到 controlleraction 方法
Route::post('url_name', 'controller@action') url_namePOST 方法映射到 controlleraction 方法
Route::put('url_name', 'controller@action') url_namePUT 方法映射到 controlleraction 方法
Route::delete('url_name', 'controller@action') url_nameDELETE 方法映射到 controlleraction 方法
Route::any('url_name', 'controller@action') url_name 的所有的 HTTP 方法映射到 controlleraction 方法

需要注意:

  • 一旦指定了请求方法,如 GET,那么此条 URL 就必须通过 GET 方法才能匹配成功,这在一定程度上提高的系统的安全性。当然如果指定了 any 那就不限制方法咯。

这里我们将 url_name 视作参数一controller@action 视作参数二,接下来详细介绍下这两个参数。

参数一: url_name 的规则

  • 直接指定
member/avatar

那么 url 中了除了域名端口之外,必须完全的与 member/avatar 相同才能匹配成功。

  • 指定变量

比如说,我们有这种需求:member/1 显示会员ID为1的资料页,member/2 显示会员ID为2的资料页,那么直接写死是不可以的,这个时候数字就是一个可选的变量了,所以应该这样写:

member/:id

这样我们访问 member/1 或者 member/10001 都是可以匹配成功的。

  • 可选参数

比如说我们有这种需求,member/1 显示的是会员ID为1的资料1,member 显示的会员列表,这种情况下我们可以这样写:

member/[:id]

这样的话 member/1 或者 member 都可以匹配成功。

日常开发中常用的就这三种啦,想要深入的可以联系作者互相学习哦。

参数二:controller@action 的规则

thinkphp5 对于路由定义的第二个参数有5种方式,但是这里作者只会讲解其中2种最常用的方式。

定义方式 定义格式
路由到模块/控制器 模块/控制器/操作?额外参数1=值1&额外参数2=值2…
路由到类的方法 \完整的命名空间类::静态方法\完整的命名空间类@动态方法

我们还拿上面的 Index.php 说明:

路由到模块/控制器的定义方式:

Route::get('index/index', 'index/index/index');

路由到类的定义方式:

Route::get('index/index', '\app\index\controller@index');

路由两个基本参数就讲解到这里了,不要以为就只有两个参数哦其他参数我们会在下一篇文章中讲解,下面看一个具体的实例。

thinkphp5 两种路由模式的留言板应用

留言板之留言读取与编辑
域名:message.app
端口:80

目录结构如下:

application
|--index
|--|--controller
|--|--|--Message.php

Message.php 文件内容如下:

普通模式下的各方法的 URL

方法 URL
list() http://message.app/index/message/list
add() http://message.app/index/message/add
create() http://message.app/index/message/create
edit() http://message.app/index/message/edit
update() http://message.app/index/message/update
delete() http://message.app/index/message/delete

自定义模式下的 URL

规则如下:

规则
Route::get('message', 'index/message/list')
Route::get('message/add', 'index/message/add')
Route::post('message/add', 'index/message/create')
Route::get('message/:id/edit', 'index/message/edit')
Route::post('message/:id/edit', 'index/message/update')
Route::get('message/:id/delete', 'index/message/delete')

对应的 URL 如下:

URL 请求方法 说明
http://message.app/message GET 留言列表
http://message.app/message/add GET 添加留言页面
http://message.app/message/add POST 创建留言
http://message.app/message/1(自定义)/edit GET 留言编辑页面
http://message.app/message/1(自定义)/edit POST 留言编辑内容保存
http://message.app/message/1(自定义)/delete GET 删除留言

好了,说了这么多了,好像忘记了意见事情?我去,还没说在自定义路由的规则在哪里编辑!!!砰砰砰...哎,别打了,且看下方:

《Thinkphp5入门系列课程》第八课:路由(一)_第3张图片
刀下留人

application 目录下有这么一个文件 route.php ,如果你是第一次安装 thinkphp5,它的内容如下:

 [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],

];

删掉,清空,就拿上面留言板的自定义路由举例,应该这样定义:

这样就可以啦。好了今天的教程就到这里啦。此篇是小滕的《Thinkphp5入门系列课程》第八课:路由(一)。
喜欢的给个订阅呗!
由于作者水平有限,如有错误请欢迎指正。

你可能感兴趣的:(《Thinkphp5入门系列课程》第八课:路由(一))