TP6使用think-qrcode的show()方法无法正常显示问题
在进行项目开发的时候遇到了要生成二维码的问题,因为二维码需求比较简单,所以在综合一些第三方库的情况下选择了think-qrcode,这是一款针对ThinkPHP5的二维码生成 SDK,但是在TinkPHP6同样适用。
一、执行命令安装
composer require dh2y/think-qrcode
安装完成后显示下面内容
二、在控制台中使用
<?php
namespace app\controller;
use dh2y\qrcode\QRcode;
use app\BaseController;
use think\facade\Config;
class Qr extends BaseController
{
public function index()
{
$code = new QRcode();
$res = $code->png('测试',false, 6)->logo(app()->getRootPath() . 'public/static/logo.jpeg')->entry();
return $res;
}
}
可以在“项目名/upload/qrcode/”下找到生成的二维码
三、自定义生成目录
根据提供的README.md文档,需要在config下新建一个qrcode文件
并配置如下
<?php
// +----------------------------------------------------------------------
// | 二维码设置
// +----------------------------------------------------------------------
return [
'cache_dir' =>'public/storage/qrcode', //缓存地址
// 'background'=> app()->getRootPath() . 'public/static/logo.png' //背景图
];
此处注意,要修改一些配置内容,找到QRcode文件,将“ Config::get(‘qrcode.’);”改为“Config::get(‘qrcode’);”删除“.”,否则无法读取qrcode配置文件中的内容
此时再执行控制器方法即可实现自定义路径
四、show()方法遇到的问题
此时当使用show()方法时,页面无法正常显示
<?php
namespace app\controller;
use dh2y\qrcode\QRcode;
use app\BaseController;
use think\facade\Config;
class Qr extends BaseController
{
public function index()
{
$code = new QRcode();
$res = $code->png('测试',false, 6)->logo(app()->getRootPath() . 'public/static/logo.jpeg')->show();
return $res;
}
}
打开QRcode文件文件查看show()方法
/**
* 显示二维码
*/
public function show(){
$url = Request::instance()->domain().'/'.$this->outfile;
exit('<img src="'.$url.'"/>');
}
点击F12查看文件路径
在thinkphp6中读取public下的内容时默认隐藏public字段,因此删除“/public”对show()方法做如下修改
/**
* 显示二维码
*/
public function show(){
$url = Request::instance()->domain().'/'.ltrim($this->outfile,'/public');
exit('<img src="'.$url.'"/>');
}
修改后再进行访问,即可正常显示