DEV Community

Hilmi Hidayat
Hilmi Hidayat

Posted on • Originally published at divisidev.com on

Generate QRCode dengan Simple QR Code Package di Laravel 9

Laravel QR Code Generator - Hi Devs 👋 Pada artikel kali ini saya akan membagikan tutorial membuat QR Code generator menggunakan Simple QR Code package di laravel 9. Fitur QR code digunakan sebagai jalan pintas atau untuk mempercepat user dalam mengakses suatu hal seperti kirim email, telephone, sms, website dan lain-lain. Nah, di Laravel terdapat third party package yang luar biasa untuk membuat QR Code generator. Package tersebut adalah Simple QR Code dari SimpleSoftwareIO yang sudah mendapatkan star lebih dari 2 ribu di github.

Baiklah, mari kita langsung saja ke koding. 👇

Step 1: Install Laravel

//via Laravel Installer
composer global require laravel/installer
laravel new laravel-qrcode

//via Composer
composer create-project laravel/laravel laravel-qrcode
Enter fullscreen mode Exit fullscreen mode

Langkah yang pertama tentu saja menginstall laravel project baru. Ada beberapa cara untuk menginstall laravel, diantaranya menggunakan laravel installer dan composer. Disini saya akan memberikan contoh untuk menginstall laravel project dengan nama laravel-qrcode.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-qrcode
DB_USERNAME=root
DB_PASSWORD=
Enter fullscreen mode Exit fullscreen mode

Setelah proses installasi laravel project sudah selesai, jangan lupa untuk membuat database baru dan menyesuaikan value pada variable DB_DATABASE di file .env.

Step 2: Install Simple QR Code Package

composer require simplesoftwareio/simple-qrcode "~4"
Enter fullscreen mode Exit fullscreen mode

Selanjutnya, install laravel simple qr code package via composer dengan perintah seperti di atas.

Step 3: Setup User Migration & Factory

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email');
        $table->string('phone_number');
        $table->string('address');  
        $table->decimal('latitude', 10, 7);
        $table->decimal('longitude', 10, 7);       
        $table->string('website');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Oke, selanjutnya mari kita set up file users migration. Silahkan buka file database/migrations/ {timestamp} _create_users_table.php dan sesuaikan kodenya menjadi seperti di atas. Sebagai contoh, disini kita hanya memerlukan field-field seperti name, email, phone_number, address, latitude, longitude dan website pada users table.

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

Jika, file users migration sudah selesai disetup, jalankan perintah php artisan migrate untuk memigrasi file-file migrations menjadi table-table pada database.

public function definition()
{
    return [
        'name' => $this->faker->name(),
        'email' => $this->faker->unique()->safeEmail(),
        'phone_number' => $this->faker->e164PhoneNumber(),
        'address' => $this->faker->address(),
        'latitude' => $this->faker->latitude($min = -90, $max = 90),
        'longitude' => $this->faker->longitude($min = -180, $max = 180),
        'website' => 'https://' . $this->faker->domainName(),
    ];
}
Enter fullscreen mode Exit fullscreen mode

Kita sudah berhasil membuat database beserta table-tablenya, dan sekarang kita perlu untuk membuat data dummy untuk mengisi users table. Untuk itu, mari kita generate dummy data menggunakan laravel factory. Silahkan buka file database/factories/UserFactory.php dan sesuaikan kode pada function definition() menjadi seperti kode di atas.

php artisan tinker
$users = User::factory()->count(20)->create();
Enter fullscreen mode Exit fullscreen mode

Jika file UserFactory sudah selesai disetup, sekarang kita bisa generate file tersebut menjadi dummy data menggunakan tinker. Jalankan php artisan tinker pada console atau terminal teman-teman, lalu jalankan perintah $user = User::factory()->count(20)->create();.

Jika proses sudah selesai, buka users table, maka table tersebut sudah berisikan data-data dummy yang telah kita generate.

Step 4: Setup Route & Logic

<?php

use Illuminate\Support\Facades\Route;
use SimpleSoftwareIO\QrCode\Facades\QrCode;

Route::get('/', function () {
    return view('welcome',[
        'users' => \App\Models\User::all()
    ]);
});

Route::get('users/{user}/generate-qrcode/{type}', function (\App\Models\User $user, $type) {

    switch ($type) {
        case 'email':
            $qrcode = QrCode::size(300)->email($user->email);
            $text = 'Email: ' . $user->email;
            break;

        case 'phone':
            $qrcode = QrCode::size(300)->phoneNumber($user->phone_number);
            $text = 'Phone: ' . $user->phone_number;
            break;

        case 'sms':
            $qrcode = QrCode::size(300)->SMS($user->phone_number);
            $text = 'SMS: ' . $user->phone_number;
            break;

        case 'url':
            $qrcode = QrCode::size(300)->generate($user->website);
            $text = 'URL: ' . $user->website;
            break;

        case 'geo':
            $qrcode = QrCode::size(300)->geo($user->latitude, $user->longitude);
            $text = 'Address: ' . $user->address;
            break;

        default:
            $qrcode = QrCode::size(300)->generate($user->name);
            $text = 'Name: ' . $user->name;
            break;
    }

    return view('qrcode', [
        'qrcode' => $qrcode,
        'text' => $text
    ]);

})->name('qrcode');

Enter fullscreen mode Exit fullscreen mode

Oke, sampai pada salah satu bagian inti artikel ini. Pada step ini, kita akan membuat route dan logic untuk melakukan generate QR Code. Karena untuk contoh saja, disini saya sengaja membuat logic pada route (bukan di controller).

Disini kita mempunyai 2 route, yang pertama untuk menampilkan view welcome.blade.php dengan data-data dari model User, dan route yang kedua untuk generate qr code dengan parameter user_id dan type dan menampilkan view qrcode.blade.php dengan variable $qrcode dan $text.

Pada route qrcode, disini saya menggunakan switch case statement untuk menentukan type qrcode yang akan digenerate. Value pada type, didapatkan dari variable yang diparsing dari file welcome.blade.php.

Step 5: Setup View

Hampir sampai pada artikel ini, pada step ini kita akan melakukan setup pada file view yang digunakan. Kita akan menggunakan file welcome.blade.php yang merupakan file bawaan dari Laravel dan file view baru yang akan kita beri nama file tersebut dengan qrcode.blade.php.

welcome.blade.php

<!doctype html>
<html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- Bootstrap CSS -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
        <title>Laravel QR Code Generator</title>
    </head>
    <body>
        <div class="container py-5">
            <div class="row justify-content-center">
                <div class="col-md-12">
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th scope="col">#</th>
                                <th scope="col">Name</th>
                                <th scope="col">Email</th>
                                <th scope="col">Phone</th>
                                <th scope="col">Website</th>
                                <th scope="col">Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            @forelse ($users as $key => $user)
                            <tr>
                                <th scope="row">{{ ++$key }}</th>
                                <td>{{ $user->name }}</td>
                                <td>{{ $user->email }}</td>
                                <td>{{ $user->phone_number }}</td>
                                <td>{{ $user->website }}</td>
                                <td>
                                    <div class="btn-group">
                                        <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
                                        Generate QR Code
                                        </button>
                                        <ul class="dropdown-menu">
                                            <li><a class="dropdown-item" href="{{ route('qrcode',['user' => $user->id,'type' => 'email']) }}" target="_blank">E-mail Address</a></li>
                                            <li><a class="dropdown-item" href="{{ route('qrcode',['user' => $user->id,'type' => 'phone']) }}" target="_blank">Phone Number</a></li>
                                            <li><a class="dropdown-item" href="{{ route('qrcode',['user' => $user->id,'type' => 'sms']) }}" target="_blank">Text (SMS)</a></li>
                                            <li><a class="dropdown-item" href="{{ route('qrcode',['user' => $user->id,'type' => 'url']) }}" target="_blank">Website URL</a></li>
                                            <li><a class="dropdown-item" href="{{ route('qrcode',['user' => $user->id,'type' => 'geo']) }}" target="_blank">Geo Address</a></li>
                                        </ul>
                                    </div>
                                </td>
                            </tr>
                            @empty
                            <tr>
                                <td colspan="7" class="text-center">No data available</td>
                            </tr>
                            @endforelse
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
    </body>
</html>
Enter fullscreen mode Exit fullscreen mode

File view yang pertama kita setup yaitu welcome.blade.php , silakan buka file tersebut dan sesuaikan kode yang ada menjadi seperti kode di atas. Disini kita akan menggunakan starter template dari bootstrap dengan component table yang berisikan data-data users yang telah diparsing dari route yang telah kita buat. Di dalam component table, terdapat component dropdown yang terdapat link-link untuk generate qr code dengan type yang telah didefiniskan pada dropdown link tersebut.

qrcode.blade.php

<!doctype html>
<html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- Bootstrap CSS -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
        <title>Laravel QR Code Generator</title>
    </head>
    <body>
        <div class="container py-5">
            <div class="row justify-content-center">
                <div class="col-md-6">
                    <div class="card border rounded">
                        <div class="card-body text-center">
                            {!! $qrcode !!}
                        </div>
                        <div class="card-footer text-center">
                            <small class="text-muted fw-bold mt-2">
                            {{ $text }}
                            </small>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
    </body>
</html>
Enter fullscreen mode Exit fullscreen mode

Selanjutnya, buat file view baru (sejajar dengan file welcome.blade.php) dengan nama qrcode.blade.php dan copy code di atas lalu paste pada file view qrcode tersebut. Pada file qrcode.blade.php ini, kita akan menampilkan qrcode yang telah digenerate dari route yang telah kita buat sebelumnya. Dan selain itu, kita juga akan menampilkan text pendukung pada bagian card-footer.

Step 6: Testing

Laravel Simple QR Code

Sampai dipenghujung artikel. Setelah melakukan langkah-langkah di atas, dan sekarang waktunya untuk kita menguji fitur QR Code generator yang telah kita buat di laravel ini. Silahkan jalankan laravel project teman-teman, lalu buka laravel project tersebut pada browser. Silahkan generate beberapa type QR code pada beberapa data user yang ada, lalu coba scan QR code tersebut menggunakan gadget atau device teman-teman.

laravel qr code generator

Jika QR code berhasil dibaca, maka kita akan diarahkan sesuai pada type QR code tersebut. Misalnya, jika kita generate QR code dengan type email, maka jika kita scan dan berhasil dibaca, kita akan diarahkan ke email dengan email penerima merupakan email dari user tersebut.

Cukup sekian artikel kali ini, semoga artikel ini dapat membantu teman-teman #divisidev. Jika kamu punya cara lain, atau saran, kritik, masukan atau apapun itu yang ingin disampaikan, silahkan tulis komentar pada form komentar di bawah ini. Happy coding and see you in the next article 👋

📖 Full Documentation: Laravel Simple QR Code Package

Credit: Technology illustrations by Storyset

Top comments (0)