当前位置:   article > 正文

ThinkPHP5.0.11Day02:路由模式(普通模式,强制模式)_thinkphp5.0如何成功实现路由访问

thinkphp5.0如何成功实现路由访问

目录

0x01 路由模式

1.普通模式:

2.强制模式:

3.路由分组:

4.闭包路由:

5.默认路由:

6.资源路由:

7.总结:


0x01 路由模式

1.普通模式:

关闭路由,完全使用默认的PATH_INFO方式的URL,即http://服务器名/index.php/模块名/控制器名/方法名/name/value

首先在application/config.php中 将url_route_on 修改为false

打开nginx.conf配置文件

在原来的路径后面加上\index\index\index发现依然可以正常访问:

即localhost:888/tp5.0.11/public/index.php其实是localhost:888/tp5.0.11/public/index.php/index/index/index的缩写形式,如果index.php后面什么都不写,默认访问的就是index模块下的controller中的index.php的index方法,这个默认设置在application/config.php中可以看到:

如何使用PATH_INFO模式:

在application/index/controller/下创建一个User.php(首字母一定大写)

  1. <?php
  2. namespace app\index\controller;
  3. class User{
  4. public function hello(){
  5. return "hello User";
  6. }
  7. }

注意:一定要写命名空间,然后照着葫芦(Index.php)画瓢子(User.php)

然后在application/下创建一个admin目录,在admin下创建一个controller目录,在controller下创建一个Index.php(首字母大写)

内容如下:

  1. <?php
  2. namespace app\admin\controller;
  3. class Index{
  4. function say(){
  5. return "hello admin";
  6. }
  7. }

访问:

注意点:

1.命名空间一定要写上

2.controller下的文件名都是首字母大写,且文件中类名和文件名要一致

2.强制模式:

开启路由,并设置:必须定义路由才能访问

使用路由:

(1)设置路由规则:application/route.php

添加红框内的内容:(路由的注册)

访问:

如果say函数有参数怎么办呢?

修改index.php文件:

注意:再开头加上use think\Request;

也可以使用request()->param(参数名)来接受

修改route.php

访问:

另一种接收值的方式

  1. <?php
  2. namespace app\admin\controller;
  3. class Index{
  4. public function say($name){
  5. dump($name);
  6. return "hello admin";
  7. }
  8. }

firefox插件:

windows:httpRequester

Mac:ApiPost

通用:hackbar

1.route.php中配置get请求规则和post请求规则:

2.在appplication/controller/index.php中添加对应的函数:

3.get访问:

post访问:

3.在route.php中配置put请求和delete请求的规则:

  1. Route::put('admin','admin/index/index_put');
  2. Route::put('test/:id','admin/indexController/update');
  3. Route::delete('admin','admin/index/index_delete');
  4. Route::delete('test/:id','admin/indexController/delete')

PS: put请求既可以在url中代参数,也可以在请求的body中带参数。

url中的参数必须在对应控制器的形参中进行接受,例如 public function updata($id)

body中的参数,可以通过 request()->put() 、 intpu('put.') 等方法来接收

然后在application/controller/index.php中增加对应的方法:

  1. public function index_put(){
  2. dump("this is put");
  3. }
  4. public function index_delete(){
  5. dump("this is delete");
  6. }

put请求访问:

delete请求访问:

如何匹配所有类型的请求呢?

1.在route.php中增加一条any路由规则:

Route::any('anyRequest','admin/index/index_any');

2.在index.php中增加对应的方法:

  1. public function index_any(){
  2. dump("this is any");
  3. }

3.以各种形式访问:

4.现在any能匹配所有类型的请求,我们可以限制any可以匹配的请求类型,例如:让any只匹配put请求

Route::any('anyRequest','admin/index/index_any',['method'=>'put']);

如何对get传参进行限制呢?

route.php中这样写规则:

Route::get('admin/:name','admin/index/index_get','',['name'=>'^\d{2}$']);

这样只有get传参为两位数字的时候才能正常访问。

并且在路由规则中,我们还可以实现一种伪静态:

Route::get('admin/:name','admin/index/index_get',['ext'=>'html'],['name'=>'^\d+$']);

这样就限制了在参数之后必须加上.html才能正常访问

如果该项不设置(设置为''),加上html后缀和不加html后缀都可以正常访问,因为配置文件config中是这样默认设置的:

3.路由分组:

  1. Route::put('admin/put','admin/index/index_put');
  2. Route::delete('admin/delete','admin/index/index_delete');
  3. Route::post('admin/post','admin/index/index_post');
  4. Route::get('admin/get/:name','admin/index/index_get');

等价写法:

  1. Route::group('admin',function(){
  2. Route::put('put','admin/index/index_put');
  3. Route::delete('delete','admin/index/index_delete');
  4. Route::post('post','admin/index/index_post');
  5. Route::get('get/:name','admin/index/index_get');
  6. });

这样就叫路由分组,例如可以通过路由分组,将网站前台和后台的路由规则分开,前后home,后台admin

4.闭包路由:

  1. Route::get('welcome/:name',function($name){
  2. return 'welcome study tp5'.$name;
  3. });

5.默认路由:

当你所有的路由规则都匹配不上的时候,就会匹配这则路由:

Route::miss('admin/index/miss');

6.资源路由:

在admin/controller/下创建一个Article.php:

  1. <?php
  2. namespace app\admin\controller;
  3. class Article{
  4. public function index(){
  5. dump('this is index');
  6. }
  7. public function create(){
  8. dump('this is create');
  9. }
  10. public function save(){
  11. dump('this is save');
  12. }
  13. public function read(){
  14. dump('this is read');
  15. }
  16. public function edit(){
  17. dump('this is edit');
  18. }
  19. public function update(){
  20. dump('this is update');
  21. }
  22. public function delete(){
  23. dump('this is delete');
  24. }
  25. }

在route.php中配置一条资源路由:

不用指定方法,指定到控制器名即可。

Route::resource('article','admin/article');

设置后会自动注册7个路由规则:

  1. Route::get('article','admin/article/index');
  2. Route::post('article','admin/article/save');
  3. //增
  4. Route::get('article/create','admin/article/create');
  5. //查
  6. Route::get('article/:id','admin/article/read');
  7. //改
  8. Route::get('article/:id/edit','admin/article/edit');
  9. Route::put('article/:id','admin/article/update');
  10. //删
  11. Route::delete('article/:id','admin/article/delete');

read函数通常用在 文章详情页 接口。可以通过 input('get.id') input('param.id') request()->get('id') 等方法来接收 传给id的值

7.总结:

普通模式 即pathInfo模式下,访问必须有模块/控制器/方法,如果之后还要加什么参数的话,url会很长

强制模式 即路由模式,可以简化url,并且还可以对参数进行过滤限制。

推荐用强制模式。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/351317
推荐阅读
  

闽ICP备14008679号