ThinkPHP(8):请求与响应

请求

请求对象

请求对象的使用主要两种方式:依赖注入和Facade调用

依赖注入方式

<?php

namespace app\index\controller;

use think\Request;

class Index
{
   public function index(Request $request)
   {
      dump($request->param());
   }
}

Facade调用

<?php

namespace app\index\controller;

use think\Controller;
use think\facade\Request;

class Index extends Controller
{
    
    public function index()
    {
		return Request::param();
    }    
}

除了以上两种方式,还可以使用助手函数

<?php

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{

    public function index()
    {
        return request()->param('name');
    }
}

请求信息

常用的请求信息

host		当前访问域名或者IP
scheme      当前访问协议
port		当前访问的端口
url			当前完整URL
pathinfo	当前请求URL的pathinfo信息(含URL后缀)
path		请求URL的pathinfo信息(不含URL后缀)
ext			当前URL的访问后缀
method		当前请求类型

输入变量

可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括 $_GET$_POST$_REQUEST$_SERVER$_SESSION$_COOKIE$_ENV 等系统变量,以及文件上传信息

变量获取

常用方法

param     获取当前请求的变量
get		  获取 $_GET 变量
post	  获取 $_POST 变量

PARAM类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法,其它方式略

// 获取当前请求的name变量
Request::param('name');
// 获取当前请求的所有变量(经过过滤)
Request::param();
// 获取当前请求的所有变量(原始数据)
Request::param(false);
// 获取当前请求的所有变量(包含上传文件)
Request::param(true);

param方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的。

获取部分变量
如果仅获取部分变量可以使用only方法,常用方式

// 只获取当前请求的id和name变量
Request::only('id,name');
// 只获取当前请求的id和name变量
Request::only(['id','name']);
// 设置默认值
Request::only(['id'=>0,'name'=>'']);
// 只获取GET请求的id和name变量
Request::only(['id','name'], 'get');
// 只获取POST请求的id和name变量
Request::only(['id','name'], 'post');

排除某些变量后获取
except方法,用法与only相似

获取请求头信息

$info = Request::header();

返回值是一个一维数组,包含里请求头里面的基本信息

响应

响应输出

最简单的响应输出是直接在路由闭包或者控制器操作方法中返回一个字符串,例

//路由闭包
Route::get('hello/:name', function ($name) {
    return 'Hello,' . $name . '!';
});
//控制器
<?php
namespace app\index\controller;

class Index
{
    public function hello($name='thinkphp')
    {
        return 'Hello,' . $name . '!';
    }
}

由于默认是输出Html输出,所以直接以html页面方式输出响应内容。

如果修改配置文件,设置:

// 设置默认输出类型
'default_return_type'    => 'json',

输出json字符串

<?php
namespace app\index\controller;

class Index
{
    public function hello()
    {
        $data = ['name' => 'thinkphp', 'status' => '1'];
        return json($data);
    }
}

重定向

这里介绍最简单的用法

重定向

<?php
namespace app\index\controller;

class Index
{
    public function hello()
    {
        return redirect('http://www.thinkphp.cn');
    }
}

重定向传参

跳转到根目录,参数名是name,参数值是thinkphp

return redirect('/',['name'=>'thinkphp']);

文件下载

1、服务器文件一般放在public目录下的static目录,通过浏览器可以访问该资源
在这里插入图片描述
2、下载图片

一般方式

public function download()
{
   //创建下载对象,并指定下载的路径
   $download =  new \think\response\Download('static/image/a.jpg');
   //将下载文件命名为b.jpg
   return $download->name('b.jpg');
}

使用助手函数

public function download()
{
   return download('static/image/a.jpg', 'b.jpg');
}

参数1:下载路径;参数2:文件重命名

注: 无论哪种方式,下载文件的路径是服务器路径而不是URL路径,如果要下载的文件不存在,系统会抛出异常。

在这里插入图片描述
我是直接访问对应的控制器,也可以创建一个页面,点击按钮,发起请求再下载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无知的小菜鸡

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值