Laravel中使用Simple QrCode批量生成二维码的方法咨询
解决Simple QrCode批量生成二维码时循环变量不生效的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是混淆了Blade模板语法和原生PHP代码的执行逻辑——你把Blade的{!! !!}语法当成字符串拼接输出,但Laravel只会解析模板里的Blade指令,直接echo这段字符串的话,它只会被当成纯文本,不会生成二维码。
下面给你两种正确的实现方式,根据你的使用场景选择:
方式一:在Blade模板中实现(推荐,Laravel项目首选)
如果是在Laravel的Blade模板文件里(比如.blade.php),直接用Blade自带的循环语法即可,代码更简洁易读:
<table border="1"> @for ($i = 1; $i < 5; $i++) <tr> <!-- 直接在generate方法中使用循环变量$i,用{!! !!}输出HTML(不转义) --> <td>{!! QrCode::size(100)->generate("http://localhost/acex/1.php?g={$i}") !!}</td> <td>对应链接:http://localhost/acex/1.php?g={{ $i }}</td> </tr> @endfor </table>
方式二:在原生PHP文件中实现
如果是在普通PHP文件里(非Blade模板),直接调用QrCode::generate()获取生成的HTML代码,然后输出即可,不需要依赖Blade语法:
<table border="1"> <?php for ($i = 1; $i < 5; $i++) { $url = "http://localhost/acex/1.php?g=" . $i; // 直接获取二维码的HTML内容,不需要包裹Blade的{!! !!} $qrHtml = QrCode::size(100)->generate($url); echo "<tr><td>{$qrHtml}</td><td>对应链接:{$url}</td></tr>"; } ?> </table>
为什么你的原代码不生效?
你之前的代码把{!! QrCode::size(100)->generate('' . $url .'') !!}当成字符串拼接后echo,这相当于告诉PHP输出这段文本,而不是让Laravel执行QrCode的生成逻辑。只有当Blade模板引擎解析到{!! !!}时,才会执行里面的PHP代码并输出不转义的HTML结果。
内容的提问来源于stack exchange,提问作者machagr
相关产品推荐
相关产品推荐

