请求
请求对象
请求对象的使用主要两种方式:依赖注入和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路径,如果要下载的文件不存在,系统会抛出异常。
我是直接访问对应的控制器,也可以创建一个页面,点击按钮,发起请求再下载