Thinkphp5视频教程
通过本文你可以学到下面几点:
- 普通模式路由
- 自定义模式路由
-
thinkphp5
两种路由模式的留言板应用
普通模式的路由
普通模式的路由集成自 tp3.2
框架,看过前面文章的同学会知道 thinkphp5
的目录结构是这样的:
application
|----index
|----|----controller
|----|----|----Index.php
Index.php 内容:
我们都知道 MVC
中 C
也就是 Controller
负责中间调度,也就是我们所有的访问都是经过 Controller
的,那么我们怎么访问上面 Index.php
文件中的 index
方法呢? thinkphp5
的普通模式路由是这样的:
http(s)://domain.com/index(模块名)/index(控制器)/index(方法名)
所以,上面的 index
方法的 URL
访问地址是:
http://domain.com/index/index/index
普通模式就这样咯,很简单吧 ^ - ^。
自定义模式路由
从名字就可以看出,自定义模式的路由就是 URL
的格式是我们自定义的,这样不管从 URL
的简洁或者隐藏真实 action
等方面都更加自由。接下来就详细介绍下自定义模式路由的使用。
thinkphp5
支持混合路由模式,也就是普通模式和自定义路由模式可以混合使用,但是在这里作者强烈不推荐此种写法,或许初期写项目并不觉得麻烦,但是不管是后期的维护还是开发团队新成员的加入都会进入此坑中。所以,作者建议要不使用普通模式,要不使用自定义路由模式,只能二选其一!
首先呢,我们需要配置下文件 application/config.php
:
'url_route_on' => true,
'url_route_must' => true,
'route_complete_match' => true,
上面是开启自定义路由并强制使用自定义路由模式(也就是禁止使用普通模式了)且强制完整匹配哦,接下来我们访问
Controller
的方法都需要手动的指定路由映射咯。
thinkphp5
提供了很多种路由注册方法,但是作者今天在这里只介绍下面几种方法,因为作者认为其他的方法并没有什么卵用,不过这仅仅是作者的观点,如想深入的了解,你懂的!
注意:下面的 Route
是在声明 use think\Route
后使用的
注册方法 | 解释 |
---|---|
Route::get('url_name', 'controller@action') |
将 url_name 的 GET 方法映射到 controller 的 action 方法 |
Route::post('url_name', 'controller@action') |
将 url_name 的 POST 方法映射到 controller 的 action 方法 |
Route::put('url_name', 'controller@action') |
将 url_name 的 PUT 方法映射到 controller 的 action 方法 |
Route::delete('url_name', 'controller@action') |
将 url_name 的 DELETE 方法映射到 controller 的 action 方法 |
Route::any('url_name', 'controller@action') |
将 url_name 的所有的 HTTP 方法映射到 controller 的 action 方法 |
需要注意:
- 一旦指定了请求方法,如
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 |
删除留言 |
好了,说了这么多了,好像忘记了意见事情?我去,还没说在自定义路由的规则在哪里编辑!!!砰砰砰...哎,别打了,且看下方:
在 application
目录下有这么一个文件 route.php
,如果你是第一次安装 thinkphp5
,它的内容如下:
[
'name' => '\w+',
],
'[hello]' => [
':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
':name' => ['index/hello', ['method' => 'post']],
],
];
删掉,清空,就拿上面留言板的自定义路由举例,应该这样定义:
这样就可以啦。好了今天的教程就到这里啦。此篇是小滕的《Thinkphp5入门系列课程》第八课:路由(一)。
喜欢的给个订阅呗!
由于作者水平有限,如有错误请欢迎指正。