ThinkPHP5.0.11Day02:路由模式(普通模式,强制模式)

目录

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(首字母一定大写)

<?php
namespace app\index\controller;

class User{
    public function hello(){
        return "hello User";
    }
}

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

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

内容如下:

<?php
namespace app\admin\controller;
class Index{
    function say(){
        return "hello admin";
    } 
}

访问:

注意点:

1.命名空间一定要写上

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

2.强制模式:

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

使用路由:

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

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

访问:

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

修改index.php文件:

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

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

修改route.php

访问:

另一种接收值的方式

<?php
namespace app\admin\controller;
class Index{
    public function say($name){
        dump($name);
        return "hello admin";
    } 
}

firefox插件:

windows:httpRequester

Mac:ApiPost

通用:hackbar

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

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

3.get访问:

post访问:

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

Route::put('admin','admin/index/index_put');
Route::put('test/:id','admin/indexController/update');
Route::delete('admin','admin/index/index_delete');
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中增加对应的方法:

   public function index_put(){
        dump("this is put");
    }
    public function index_delete(){
        dump("this is delete");
    }

put请求访问:

delete请求访问:

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

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

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

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

  public function index_any(){
        dump("this is any");
    }

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.路由分组:

Route::put('admin/put','admin/index/index_put');
Route::delete('admin/delete','admin/index/index_delete');
Route::post('admin/post','admin/index/index_post');
Route::get('admin/get/:name','admin/index/index_get');

等价写法:

Route::group('admin',function(){
    Route::put('put','admin/index/index_put');
    Route::delete('delete','admin/index/index_delete');
    Route::post('post','admin/index/index_post');
    Route::get('get/:name','admin/index/index_get');
});

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

4.闭包路由:

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

5.默认路由:

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

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

6.资源路由:

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

<?php
namespace app\admin\controller;
class Article{
    public function index(){
        dump('this is index');
    }
    public function create(){
        dump('this is create');
    }
    public function save(){
        dump('this is save');
    }
    public function read(){
        dump('this is read');
    }
    public function edit(){
        dump('this is edit');
    }
    public function update(){
        dump('this is update');
    }
    public function delete(){
        dump('this is delete');
    }
}

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

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

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

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

Route::get('article','admin/article/index');
Route::post('article','admin/article/save');
//增
Route::get('article/create','admin/article/create');
//查
Route::get('article/:id','admin/article/read');
//改
Route::get('article/:id/edit','admin/article/edit');
Route::put('article/:id','admin/article/update');
//删
Route::delete('article/:id','admin/article/delete');

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

7.总结:

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

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

推荐用强制模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'"<>{{7*7}}

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值