文件下载
对象注入

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'