2024.03.29
LaravelにてURLからQRコードを作成・表示・ダウンロードする機能を追加します。
「simplesoftwareio/simple-qrcode」というライブラリーを使用します。
1 | composer require simplesoftwareio/simple-qrcode |
はじめに、ライブラリーのインストールを行います。
Cannot use simplesoftwareio/simple-qrcode’s latest version 4.2.0 as it requires ext-gd * which is missing from your platform.
上記のエラーが発生した場合はPHPの拡張モジュール「GD」を追加してください。
Dockerで環境構築している場合には、DockerFileに以下のハイライトの部分を追加するとGDが有効化されます。
1 2 3 4 5 6 7 8 9 10 11 | FROM php:8.2-fpm-bullseye COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer RUN apt-get update \ && apt-get -y install --no-install-recommends \ git \ unzip \ libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && docker-php-ext-install \ pdo_mysql \ gd \ |
インストールが完了したら、QRコード作成用のページを実装します。
必要になるのは、ルートとコントローラとブレードの追加ですので、以下に載せておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\QrController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider and all of them will | be assigned to the "web" middleware group. Make something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/qr', [QrController::class, 'index']); Route::post('/qr', [QrController::class, 'index'])->name('qr'); Route::get('/qr/download', [QrController::class, 'download'])->name('qr.download'); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use SimpleSoftwareIO\QrCode\Facades\QrCode; class QrController extends Controller { /** * 入力画面 */ public function index(Request $request) { $url = $request->input('url'); $path = null; if (isset($url)) { $path = 'qrcode.svg'; // QRコード作成 $qrCode = QrCode::generate($url); // QRコード保存 Storage::put($path, $qrCode); } $data = [ 'url' => $url, 'path' => $path, ]; return view('qr', $data); } /** * 表示・ダウンロード */ public function download(Request $request) { $path = $request->input('path'); $download = $request->boolean('download', false); if ($download) { return response()->download(Storage::path($path)); } return response()->file(Storage::path($path)); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Laravel</title> </head> <body> <h1>QR作成</h1> <form action={{ route('qr') }} method="post"> @csrf <input type="text" name="url" /> <button type="submit">作成</button> </form> <p>{{ $url }}</p> @isset($path) <img src={{ route('qr.download', ['path' => $path]) }} alt="QRコード" /> <a href={{ route('qr.download', ['path' => $path, 'download' => true]) }}>ダウンロード</a> @endisset </body> </html> |
作成した画面がこちらになります。
「https://www.google.com/」を入力して作成ボタンを押すとQRコードが作成され、Storageに保存されます。
画像はコントローラのdownload関数へのパスをimgタグに埋め込むことで表示しています。
また、ダウンロードのリンクを押すことで、保存したqrcode.svgをダウンロードできます。
以上、LaravelでのQRコードの表示とダウンロードでした。