You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel10+PHP8.1中BaconQrCode报Png类未找到的解决咨询

问题原因

从Laravel7迁移到Laravel10时,BaconQrCode库的版本大概率被升级到了2.x及以上版本,该版本对API做了重大重构:

  • 旧版本(1.x)中的BaconQrCode\Renderer\Image\Png类已被调整,不再支持直接作为Writer的参数传入
  • 原有的Writer初始化逻辑完全不兼容新版本API
解决步骤

1. 确认并更新依赖版本

执行命令查看当前BaconQrCode版本:

composer show bacon/bacon-qr-code

如果版本低于2.x,执行升级命令:

composer update bacon/bacon-qr-code

若需要锁定版本,可在composer.json中设置:

"require": {
    "bacon/bacon-qr-code": "^2.0"
}

设置完成后执行composer install更新依赖。

2. 修改代码适配新API

替换原有代码中的命名空间和二维码生成逻辑:

use BaconQrCode\Renderer\Image\Png;
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Writer;

public function generateUser($usrID)
{
    $user = DB::table('users')->where('usrID', '=', $usrID)->first();

    if (!$user) {
        return redirect()->back()->with('error', 'User not found.');
    }

    // 初始化渲染器,设置二维码尺寸(400像素)
    $renderer = new ImageRenderer(
        new RendererStyle(400),
        new Png()
    );
    $writer = new Writer($renderer);
    // 生成二维码字符串
    $qrCodeString = $writer->writeString($user->usrUuId);

    $qrdata = [
        'usrLastName' => $user->usrLastName,
        'usrFirstName' => $user->usrFirstName,
        'usrMiddleName' => $user->usrMiddleName,
        'qrCode' => $qrCodeString,
    ];

    return view('qr.users.print', compact('qrdata'));
}

3. 验证视图渲染

确保视图中正确输出二维码,可通过base64编码直接展示:

<img src="data:image/png;base64,{{ base64_encode($qrdata['qrCode']) }}" alt="User QR Code">

内容的提问来源于stack exchange,提问作者Jay marlou Talao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:58:14