はじめに
Laravelでは簡単にQRコードを生成できるとのことでその記録です。
動作環境・使用するツールや言語
- OS バージョン
- Windows11
- ツール
- VSCode
- 言語
- HTML&CSS
- フレームワーク
- Laravel8
- 環境
- docker v4.32.0
前提
- Laravelのセットアップは済んでいるものとする
- web.phpは特段変わるとこないので省く
手順
1.パッケージのインストール
2. サービスプロバイダーとエイリアスの設定
3. コントローラーでQRコードを生成
4. ビューでQRコードを表示
1.パッケージのインストール
PHPコンテナ内
composer require simplesoftwareio/simple-qrcode
- このコマンドでインストール完了
インストールされたかどうか確認する方法はいくつかあるが、一番簡単だなぁ~と思ったのが、composer.json
で確認する方法。
src\composer.json
{
~
"require": {
~
"simplesoftwareio/simple-qrcode": "^2.0"
// 上記のように"simplesoftwareio/simple-qrcode": "^2.0"があればOK
},
~
}
2. サービスプロバイダーとエイリアスの設定
config\app\php
'providers' => [
~
SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class,
// 色々書いてあるが、一番下に記述
]
'aliases' => [
~
'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class,
// 色々書いてあるが、一番下に記述
]
3. コントローラーでQRコードを生成
QrCodeController.php
use SimpleSoftwareIO\QrCode\Facades\QrCode;
public function test()
{
$qrCode = QrCode::size(200)->generate("Hello World");
return view('test', compact('qrCode'));
}
コントローラーではなく、ビューでQRコードを生成する場合は下記 ↓
QrCodeController.php
public function test()
{
return view('test');
}
4. ビューでQRコードを表示
test.blade.php
<body>
<div>{!! $qrCode !!}</div>
</body>
コントローラーではなく、ビューでQRコードを生成する場合は下記 ↓
test.blade.php
<body>
{!! QrCode::generate('Hello World')) !!}
<!-- generate()でQRコードの内容を指定 -->
</body>
主要なつまずいた所
1.上記「4. ビューでQRコードを表示」まで行き、ブラウザで確認したところ、「クラス 'SimpleSoftwareIO\QrCode \ QrCodeServiceProvider'が見つかりません」
とエラーが出現。
考えたこと・実行したこと
- サービスプロバイダーとエイリアスの記述が正しくない?
- 問題なし
-
composer require simplesoftwareio/simple-qrcode
をインストールした時のPHPコンテナ内のメッセージを確認-
Cannot use simplesoftwareio/simple-qrcode's latest version 4.2.0 as it requires ext-gd * which is missing from your platform.
を確認。 - ext-gd 拡張モジュールが不足しているため、最新バージョンの simple-qrcode をインストールできなかったとのこと
-
解決策
Dockerコンテナ内でPHPのgd拡張モジュールをインストールと設定を追記
Dockerfile
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
改めて、dockerビルドからやり直すとうまく表示されました。
参考資料