文件下载
对象注入
TP 文件下载
参考资料:TP6 官方文件下载文档
1.下载服务器存在文件
<?php
namespace app\index\controller;
use think\response\File;
class Down
{
public function index(){
return "这是下载前置页面,下载方法是 down ,为了有页面展示 所有就有了这个方法。<br>
<img src='../../static/image/acg.gy_50.jpg' width='500px'><hr>
<a href='dome'>点击下载壁纸</a><br>";
}
public function dome(){
//TP 的下载方法必须 存在实体文件,如果没有将会报错。
$file = new File('../public/static/image/acg.gy_50.jpg');
//设置下载文件名,自动识别后缀,无需设置。
//return $file->name("壁纸");
// 使用助手函数和上面的下载文件名是一样的效果
//return download('../public/static/image/acg.gy_50.jpg', '壁纸');
// 设置300秒有效期
return download('../public/static/image/acg.gy_50.jpg', '壁纸')->expire(300);
}
}
下载前置页面
点击下载后
2.下载不存在的文本
需要申明一下 isContent(true)
<?php
namespace app\index\controller;
use think\response\File;
class Down
{
public function index(){
return "这是下载前置页面,下载方法是 down ,为了有页面展示 所有就有了这个方法。<br>
<img src='../../static/image/acg.gy_50.jpg' width='500px'><hr>
<a href='dome'>点击下载壁纸</a><br>";
}
public function dome(){
//如果你仅仅是想下载一些写入内容的文档,需要告诉TP 这是可下载文件。
$file = new File('这是内容,如果想下载我,需要用到 isContent(true) ');
return $file->name("测试文档.txt")->isContent(true);
}
}
下载结果 ↓
请求对象的注入与调用
1.构造方法注入
是指没有继承 BaseController 基类情况下使用
如果继承了 BaseController 基类,直接使用同样的调用方法即可,不用再注入
<?php
namespace app\index\controller;
use think\Request;
class Down
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function index(){
//利用 get() 方法 测试是否注入成功
//注意,我的服务器因为是 Nginx 所以做了URL 重写,
//重写的时候 会把路径也作为GET变量传过来。所以打印值会多一个当前路径
dump($this->request->get());
//利用 post() 方法 测试是否注入成功
echo "<hr>";
dump($this->request->post(['name'=>'Cry']));
}
}
2.操作方法注入
不管有没有继承 BaseController 基类,都可以使用此方式
<?php
namespace app\index\controller;
use think\Request;
class Down
{
public function index(Request $request){
//利用 get() 方法 测试是否注入成功
//注意,我的服务器因为是 Nginx 所以做了URL 重写,
//重写的时候 会把路径也作为GET变量传过来。所以打印值会多一个当前路径
dump($request->get());
//利用 post() 方法 测试是否注入成功
echo "<hr>";
dump($request->post(['name'=>'Cry']));
}
}
3.静态调用
静态调用是利用TP6 的 facade 机制来静态请求的,use 的时候需要注意路径
需要手动 use think\facade\Request;
为什么需要注意?因为现阶段的 「编辑软件」 不会自动补全facade 的 use 路径 👻👻👻
<?php
namespace app\index\controller;
use \think\facade\Request;
class Down
{
public function index(){
//利用 get() 方法 测试是否注入成功
//注意,我的服务器因为是 Nginx 所以做了URL 重写,
//重写的时候 会把路径也作为GET变量传过来。所以打印值会多一个当前路径
dump(Request::get());
//利用 post() 方法 测试是否注入成功
echo "<hr>";
dump(Request::post(['name'=>'Cry']));
}
}
4.助手函数
TP6 一直为用户封装了很多助手函数,基本涵盖了常用的所有需求
也就是说,TP6不辞辛苦的把每一个人的写法,都尽量兼容😂😂
无需注入,无需继承 BaseController ,任何额外操作都不需要😂😂
但是官方就是不优先推荐 😂😂😂
其实里面有的也是 facade
<?php
namespace app\index\controller;
class Down
{
public function index(){
//利用 get() 方法 测试是否注入成功
//注意,我的服务器因为是 Nginx 所以做了URL 重写,
//重写的时候 会把路径也作为GET变量传过来。所以打印值会多一个当前路径
dump(request()->get());
//利用 post() 方法 测试是否注入成功
echo "<hr>";
dump(request()->post(['name'=>'Cry']));
}
}
伪静态
默认支持 .html 作为后缀
修改方式:app\config\route.php 文件下 'url_html_suffix' => 'html' ,如果想关闭,改为 false ,如果不设置,则默认任何后缀都可访问。
如果想支持多后缀 'url_html_suffix' => 'html|xml'