Generate QR Code Dengan Simple QRCode di Laravel

Generate QR Code Dengan Simple QRCode di Laravel

Admin
Admin・ 27 November 2020
11 min read ・ 16982 views

Generate QRCode Laravel - QR code terkadang sangat dibutuhkan untuk identitas produk, barang atau inventori dan lain-lain. Lalu bagaimana cara membuat generate QRcode ? mudah saja, kita bisa menggunakan Simple QRcode untuk membuat QRcode di framework laravel.

Di artikel ini, kita akan sama-sama belajar bagaimana cara membuat atau generate QRcode agar ketika code tersebut kita bisa diarahkan ke sms, email, website atau hanya sekedar mengetahui ada data apa sih di balik QR code tersebut.

Dipercobaan ini kita akan mulai semua dari 0 yaitu diawali dengan membuat projek laravel baru. Berikut ini adalah langkah-langkahnya:

1. Buat projek laravel dengan masuk ke direktori dimana Anda ingin membuat project laravel tersebut. Sama seperti petunjuk dari laravel, kita bisa membuat projek baru dengan command seperti di bawah ini.

composer create-project --prefer-dist laravel/laravel qrcode

2. Jika projek laravel sudah berhasil dibuat, selanjutnya masuk ke direktori projek tersebut dan jalankan command dari Simple QRcode seperti di bawah ini.

composer require simplesoftwareio/simple-qrcode "~4"

3. Buat file controller baru dengan command seperti di bawah ini.

php artisan make:controller DataController

4. Kemudian buat model sekaligus file migrate untuk membuat table penampung data yang akan di generate menjadi QRcode. Command untuk membuat model/migrate tersebut bisa dilihat seperti di bawah ini.

php artisan make:model Data -m

5. Buka file Data Migrate yang ada di folder database > migrations dan edit sehingga menjadi seperti di bawah ini.

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDataTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('data', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email');
            $table->bigInteger('phone');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('data');
    }
}

6. Buat database baru di phpmyadmin, adminer, laragon atau yang lainnya.

7. Sesuaikan DB_DATABASE di file .env dengan nama database yang baru dibuat.

8. Jika database baru sudah dibuat, kembali ke terminal dan jalankan command

php artisan migrate.

9. Buka file DataController yang sudah dibuat pada langkah ke 3 tadi, kemudian edit code menjadi seperti di bawah ini.

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use App\Models\Data;
class GenerateController extends Controller
{
    public function index(){
        $data = Data::all();
        return view ('welcome', ['data' => $data]);
    }
    public function store(Request $request){
        $data = new Data;
        $data->name = $request->name;
        $data->email = $request->email;
        $data->phone = $request->phone;
        $data->save();
        return back();
    }
    public function generate ($id)
    {
        $data = Data::findOrFail($id);
        $qrcode = QrCode::size(400)->generate($data->name);
        return view('qrcode',compact('qrcode'));
    }
}

NB:

- Function index berfungsi untuk menampilkan data-data dari database (table data).

- Function store berfungsi untuk menambahkan data baru ke dalam table data (model Data).

- Function generate berfungsi untuk membuat QRcode dari data yang ingin di generate menjadi QR code (nama, email atau phone number).

10. Buka file web.php yang ada di folder routes, kemudian edit menjadi seperti di bawah ini.

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DataController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', [DataController::class, 'index']);
Route::post('/', [DataController::class, 'store'])->name('store');
Route::get('qrcode/{id}', [DataController::class, 'generate'])->name('generate');

11. Buka file welcome.blade.php yang ada di folder views, kemudian edit menjadi seperti di bawah ini.

<!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>
        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">
        <!-- Styles -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
        <style>
            body {
                font-family: 'Nunito';
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="row mt-5">
                <form class="form-inline" action="{{ route('store') }}" method="POST">
                    @csrf
                    <div class="form-group mb-2">
                      <input type="text" class="form-control" name="name" placeholder="Masukkan Nama">
                    </div>
                    <div class="form-group mb-2 ml-1">
                        <input type="email" class="form-control" name="email" placeholder="Masukkan Email">
                      </div>
                      <div class="form-group mb-2 ml-1">
                        <input type="number" class="form-control" name="phone" placeholder="Masukkan Nomor Telephone">
                      </div>
                    <button type="submit" class="btn btn-primary ml-1 mb-2">Create</button>
                  </form>
                <br>
                <table class="table">
                    <thead>
                      <tr>
                        <th scope="col">Nama</th>
                        <th scope="col">Email</th>
                        <th scope="col">Phone</th>
                        <th scope="col">QR code</th>
                      </tr>
                    </thead>
                    <tbody>
                     @foreach ($data as $data)
                     <tr>
                        <td>{{ $data->name }}</td>
                        <td>{{ $data->email }}</td>
                        <td>{{ $data->phone }}</td>
                        <td>
                            <a href="{{ route('generate',$data->id) }}" class="btn btn-primary">Generate</a>
                        </td>
                      </tr>
                     @endforeach
                    </tbody>
                  </table>
            </div>
        </div>
        <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
    </body>
</html>

12. Buat file view baru di dalam folder views dengan nama qrcode.blade.php untuk menampilkan QR code nantinya. Kemudian tambahkan code di bawah ini ke file view baru tersebut.

<!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>
        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">
        <!-- Styles -->
        <style>
            /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-t{border-top-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.text-center{text-align:center}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\:rounded-lg{border-radius:.5rem}.sm\:block{display:block}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:h-20{height:5rem}.sm\:ml-0{margin-left:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-0{padding-top:0}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:border-t-0{border-top-width:0}.md\:border-l{border-left-width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.dark\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.dark\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.dark\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.dark\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}}
        </style>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
        <style>
            body {
                font-family: 'Nunito';
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="row mt-5 text-center">
                {!! $qrcode !!}
            </div>
        </div>
        <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
    </body>
</html>

Oke, sekarang kita coba jalankan programnya dengan menjalankan server (php artisan serve). Buka url 127.0.0.1:8000 atau qrcode.test.

membuat qrcode di laravel

Tampilan halaman depan atau dari file welcome.blade.php akan seperti gambar di atas, selanjutnya kita coba dengan input data pada 3 form yang ada yaitu nama, email, phone number dan kemudian klik create untuk menambahkan data tersebut.

generate qrcode di laravel dengan simple qrcode

Untuk melihat QR code dari beberapa data yang ada, tekan tombol Generate. Maka akan menampilkan QR code dari data tersebut seperti yang bisa dilihat pada gambar di atas.

generate qrcode di laravel dengan simple qrcode

Jika kita coba scan pakai scanner hp atau yang lain maka ketika scanner menangkap QR code tersebut kita akan didirect ke halaman dengan tampilan seperti gambar di atas.

Dari sini, kita sudah berhasil membuat QR code di laravel yang ketika kita scan akan menampilkan data nama. Lalu bagaimana agar ketika kita scan, kita didirect ke email ? seperti ini caranya;

Di file DataController atau tepatnya di function generate, edit codenya menjadi seperti di bawah ini.
 

public function generate ($id)
    {
        $data = Data::findOrFail($id);
        $qrcode = QrCode::size(400)->email($data->email);
        return view('qrcode',compact('qrcode'));
    }

Save, kemudian coba scan lagi. Maka Anda akan di arahkan langsung ke email.

Lalu, apakah juga bisa jika saat kita scan, kita akan di arahkan langsung ke sms ? jawabannya juga bisa. Kita tinggal menyesuaikan code di function generate menjadi seperti di bawah ini
 

public function generate ($id)
    {
        $data = Data::findOrFail($id);
        $qrcode = QrCode::size(400)->SMS($data->phone);
        return view('qrcode',compact('qrcode'));
    }

Jika ingin didirect ke telepon bisa juga, caranya langsung saja ganti code di function generate menjadi seperti di bawah ini.

public function generate ($id)
    {
        $data = Data::findOrFail($id);
        $qrcode = QrCode::size(400)->phoneNumber($data->phone);
        return view('qrcode',compact('qrcode'));
    }

Demikian artikel mengenai cara membuat QR code dengan Simple QR code di laravel, untuk lebih lengkapnya mengenai penggunaan Simple QR code ini, silahkan kunjungi di website resmi Simple QR code di simplesoftware.io . Jika ada yang ingin ditanyakan, didiskusikan atau koreksi dari artikel ini, silahkan tulis komentar di bawah ini.

Tinggalkan Komentar
Loading Comments