Akademi Manajemen Informatika

sandidharma.ac.id – Halo Bakat Digital, gimana kabarnya hari ini? Niscaya Tetap semangat ya? Pada kesempatan ini kita akan membahas tentang pengelolaan pengaturan aplikasi laravel menggunakan sebuah package bernama Laravel Settings.

Apa itu Laravel Settings?

Beberapa waktu yang Lewat saya Membikin sebuah laravel package bernama Laravel Settings. Package ini berfungsi Buat mengelola pengaturan aplikasi laravel dengan mudah dan Segera. Package ini menggunakan database Buat menyimpan pengaturan dan menyediakan fitur cache yang dapat diaktifkan agar pengambilan data pengaturan dapat dilakukan lebih Segera tanpa membebani database. Buat lebih lengkapnya Engkau Dapat baca dokumentasinya melalui link berikut:

OK, langsung saja kita mulai ya!

Menyiapkan Project Laravel

Buat mengikuti tutorial ini, tentu kita perlu menyiapkan project Laravel terlebih dahulu. Mari kita buat project Hampa lengkap dengan databasenya ya.

Buat Project

composer create-project laravel/laravel laravel-settings-tutorial

Konfigurasi Environment Variable

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

Saya menggunakan database sqlite, tentu Engkau juga Dapat menggunakan database lain ya.

Jalankan Migrasi

php artisan migrate

   WARN  The SQLite database does not exist: database/database.sqlite.

 ┌ Would you like to create it? ────────────────────────────────┐
 │ Yes                                                          │
 └──────────────────────────────────────────────────────────────┘

   INFO  Preparing database.

  Creating migration table ............................................................................................................... 18ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table .................................................................................................... 6ms DONE
  2014_10_12_100000_create_password_reset_tokens_table .................................................................................... 3ms DONE
  2019_08_19_000000_create_failed_jobs_table .............................................................................................. 6ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ................................................................................... 9ms DONE

Buat Halaman Buat Percobaan

Buat mencoba pengaturan kita juga siapkan sebuah halaman Buat mencoba pengaturan aplikasi. Mari kita buat file index.blade.php.

Ohiya biar keren sedikit, kita minta Donasi bootstrap ya :D.

Sementara kodenya akan seperti berikut ini:

doctype html>
html lang="en">

head>
    meta charset="utf-8">
    meta name="viewport" content="width=device-width, initial-scale=1">
    title>Laravel Settings Tutorialtitle>
    link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
head>

body>
    main class="py-5">
        h1 class="text-center mb-5">Laravel Settings Tutorialh1>
        div class="container">
            div class="row g-3">
                div class="col-md-6">
                    div class="card">
                        div class="card-header">
                            Pengaturan Web
                        div>
                        div class="card-body">
                            form action="" method="POST">
                                @csrf
                                div class="mb-3">
                                    label for="site_name" class="form-label">GitHub Profile URLlabel>
                                    input type="text" name="site_name" id="site_name" class="form-control">
                                div>
                            form>
                        div>
                    div>
                div>
                div class="col-lg-6">
                    div class="card">
                        div class="card-header">Hasil Pengaturan Aplikasidiv>
                        div class="card-body">
                            table class="table table-bordered">
                                tr>
                                    th>GitHub Profile URLth>
                                    td>Hasilnya nanti di sinitd>
                                tr>
                            table>
                        div>
                    div>
                div>
            div>
        div>
    main>
    script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous">
    script>
body>

html>

Dan hasilnya akan seperti berikut

Hasil View 1

OK, cukup! Sementara biarkan seperti itu dan kita akan pindah dulu ke bagian Laravel Settings

READ  Pengertian, Tugas, Gaji, dan 11 Skill Wajib

Install dan Konfigurasi Laravel Settings

Install Laravel Settings

composer require ruangdeveloper/laravel-settings

Publish Config

php artisan vendor:publish --provider="RuangDeveloper\LaravelSettings\LaravelSettingsServiceProvider" --tag="config"

Sekarang kita akan punya file config bernama laravel-settings.php dalam folder config. Berikut ini isinya:

php

return [
    'with_cache' => false,
    'cache_prefix' => 'laravel-settings',
    'cache_lifetime' => 60 * 60 * 24 * 7, // 7 days
    'model' => \RuangDeveloper\LaravelSettings\Models\Setting::class,
    'key_name' => 'key',
    'value_name' => 'value',
    'morph_name' => 'model',
    'morph_type' => 'model_type',
    'morph_id' => 'model_id',
    'morph_owner_key' => 'id',
    'defaults' => [],
    'model_defaults' => [
        // App\Models\User::class => [
        //     'your_setting_key' => 'your_setting_value',
        // ],
    ],
];

Note: saya menghapus komentar agar kodenya Bukan terlalu panjang, Engkau Dapat Menyaksikan detailnya langsung pada file konfigurasi

Publish & Run Migration File

php artisan vendor:publish --provider="RuangDeveloper\LaravelSettings\LaravelSettingsServiceProvider" --tag="migrations"

Menggunakan Laravel Settings

Buat mengelola pengaturan, kita Dapat menggunakan facade class yang sudah disediakan seperti berikut.

php

use Illuminate\Support\Facades\Route;
use RuangDeveloper\LaravelSettings\Facades\Settings;

Route::get('/', function () {
    // Menyimpan nilai pengaturan
    Settings::set('github_url', 'https://github.com/ruangdeveloper');

    // Mengambil nilai pengaturan
    $githubUrl = Settings::get('github_url');

    return view('index', [
        'githubUrl' => $githubUrl,
    ]);
});

OK, mari kita tampilkan di halamann, edit file index.blade.php

... kode lainnya

table class="table table-bordered">
  tr>
    th>GitHub Profile URLth>
    td>{{ $githubUrl }}td>
  tr>
table>

... kode lainnya

Hasilnya seperti ini:

Hasil Pengaturan

Set Pengaturan Melalui Form

Biasanya, pengaturan aplikasi dapat diubah-ubah sesuai kebutuhan melalui suatu halaman. Sebelumnya kita sudah menyiapkan sebuah form Buat mengatur github url. Mari kita buat itu menjadi berfungsi!

Buat route baru Buat handle form

Route::post('/update', function () {
    // Menyimpan nilai pengaturan
    Settings::set('github_url', request('github_url'));

    return redirect('/');
})->name('update');

Jangan lupa hapus bagian set setting di route sebelumnya

Route::get('/', function () {
    // Menyimpan nilai pengaturan
    // Settings::set('github_url', 'https://github.com/ruangdeveloper'); Hapus atau komentari bagian ini

    // Mengambil nilai pengaturan
    $githubUrl = Settings::get('github_url');

    return view('index', [
        'githubUrl' => $githubUrl,
    ]);
});

Update form

form action="{{route('update')}}" method="POST">
  @csrf
  div class="mb-3">
    label for="github_url" class="form-label">GitHub Profile URLlabel>
    input type="text" name="github_url" id="github_url" class="form-control">
  div>
  div class="text-end">
    button type="submit" class="btn btn-primary">Simpanbutton>
  div>
form>

Hasilnya Dapat Engkau lihat di sini

Pengaturan Berbeda Tiap Model

Terkadang pengaturan aplikasi Bukan hanya diterapkan secara Dunia (secara keseluruhan aplikasi) tetapi kita juga perlu memberi kebebasan pengguna Buat menyesuaikan pengaturannya masing-masing, biasanya disebut preferensi pengguna.

Dengan Laravel Settings, kita dapat menyimpan pengaturan Spesifik Buat tiap-tiap model. Mari kita buat skenario seperti berikut ini:

Aplikasi kita Mempunyai fitur notifikasi Buat beberapa info dan membolehkan pengguna Buat mengatur sendiri mereka Mau menerima notifikasi apa saja.

Konfigurasi Model

Agar kita dapat menyimpan pengaturan Buat model (dalam hal ini adalah User model), kita perlu modifikasi User model Buat menggunakan trait HasSettings. Contohnya seperrti berikut:


use RuangDeveloper\LaravelSettings\Traits\HasSettings;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, HasSettings; // Tambahkan trait HasSetting

    // kode lainnya
}

Menyimpan dan mengambil nilai pengaturan

Buat menyimpan pengaturan, kita Dapat memanggil method setSetting() dari objek user seperti berikut:

$user = User::find(1);

$user->setSetting('subscribed_notifications', []);

Dan Buat mengambil pengaturan, kita Dapat memanggil method getSetting() dari objek user seperti berikut:

$user = User::find(1);

$subscribedNotifications = $user->getSetting('subscribed_notifications');

Penerapan

Buat menerapkannya ke project kita, mari kita update routes kita seperti berikut:

Route::get('/', function () {
    // Mengambil nilai pengaturan
    $githubUrl = Settings::get('github_url');

    $users = User::all();

    return view('index', [
        'githubUrl' => $githubUrl,
        'users' => $users,
    ]);
});

Route::post('/update', function () {
    // Menyimpan nilai pengaturan
    Settings::set('github_url', request('github_url'));

    return redirect('/');
})->name('update');

Route::post('/update-model', function () {
    $userId = request('user_id');
    $subscribedNotifications = request('subscribed_notifications', []);

    $user = User::findOrFail($userId);

    $user->setSetting('subscribed_notifications', $subscribedNotifications);

    return redirect('/');
})->name('update-model');

Kemudian update juga file index.blade.php menjadi seperti berikut:

doctype html>
html lang="en">

head>
    meta charset="utf-8">
    meta name="viewport" content="width=device-width, initial-scale=1">
    title>Laravel Settings Tutorialtitle>
    link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
head>

body>
    main class="py-5">
        h1 class="text-center mb-5">Laravel Settings Tutorialh1>
        div class="container">
            div class="row g-3">
                div class="col-md-6">
                    div class="card mb-3">
                        div class="card-header">
                            Pengaturan Web
                        div>
                        div class="card-body">
                            form action="{{ route('update') }}" method="POST">
                                @csrf
                                div class="mb-3">
                                    label for="github_url" class="form-label">GitHub Profile URLlabel>
                                    input type="text" name="github_url" id="github_url" class="form-control">
                                div>
                                div class="text-end">
                                    button type="submit" class="btn btn-primary">Simpanbutton>
                                div>
                            form>
                        div>
                    div>
                    div class="card mb-3">
                        div class="card-header">
                            Pengaturan Notifikasi User
                        div>
                        div class="card-body">
                            form action="{{ route('update-model') }}" method="POST">
                                @csrf
                                div class="mb-3">
                                    label for="user_id" class="form-label">Pilih Userlabel>
                                    select name="user_id" id="user_id" class="form-select">
                                        option value="">Pilih Useroption>
                                        @foreach ($users as $user)
                                            option value="{{ $user->id }}">{{ $user->name }}option>
                                        @endforeach
                                    select>
                                div>
                                div class="mb-3">
                                    label for="site_title" class="form-label">Notifikasilabel>
                                    div class="form-check">
                                        input name="subscribed_notifications[]" class="form-check-input"
                                            type="checkbox" value="newsletter" id="newsletter">
                                        label class="form-check-label" for="newsletter">
                                            Newsletter Terbaru
                                        label>
                                    div>
                                    div class="form-check">
                                        input name="subscribed_notifications[]" class="form-check-input"
                                            type="checkbox" value="promotion" id="promotion">
                                        label class="form-check-label" for="promotion">
                                            Penawaran Promo
                                        label>
                                    div>
                                    div class="form-check">
                                        input name="subscribed_notifications[]" class="form-check-input"
                                            type="checkbox" value="security" id="security">
                                        label class="form-check-label" for="security">
                                            Keamanan Akun
                                        label>
                                    div>

                                div>
                                div class="text-end">
                                    button type="submit" class="btn btn-primary">Simpanbutton>
                                div>
                            form>
                        div>
                    div>
                div>
                div class="col-lg-6">
                    div class="card mb-3">
                        div class="card-header">Hasil Pengaturan Aplikasidiv>
                        div class="card-body">
                            table class="table table-bordered">
                                tr>
                                    th>GitHub Profile URLth>
                                    td>{{ $githubUrl }}td>
                                tr>
                            table>
                        div>
                    div>
                    div class="card mb-3">
                        div class="card-header">Hasil Pengaturan Notifikasi Userdiv>
                        div class="card-body">
                            @foreach ($users as $user)
                                table class="table table-bordered mb-2">
                                    tr>
                                        th>Nama Userth>
                                        td>{{ $user->name }}td>
                                    tr>
                                    tr>
                                        th>Notifikasi yang Dipilihth>
                                        td>
                                            @foreach ($user->getSetting('subscribed_notifications', []) as $notification)
                                                span class="badge bg-primary">{{ $notification }}span>
                                            @endforeach
                                        td>
                                    tr>
                                table>
                            @endforeach
                        div>
                    div>
                div>
            div>
        div>
    main>
    script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous">
    script>
body>

html>

Hasilnya Dapat Engkau lihat di sini

READ  Definisi, Misalnya & Langkah Membuatnya

Terkahir Tapi Tak Kalah Krusial: Cache

Secara default Laravel Settings melakukan query ke database Buat mendapatkan nilai pengaturan yang disimpan, hal ini Bukan masalah Kalau aplikasi kita Tetap kecil, Tetapi akan menjadi sangat membebani Kalau aplikasi kita sudah mulai besar dan banyak diakses pengguna serta Mempunyai pengaturan yang banyak. Oleh karena itu, Laravel Settings sudah menyediakan fitur cache Buat menyimpan nilai pengaturan ke dalam cache.

Buat mengaktifkan cache, kita hanya perlu mengupdate pengaturan cache di dalam file laravel-settings.php.

php

return [
    'with_cache' => true, // atur atribut ini menjadi berniali true

    // pengaturan lainnya
];

Dengan begitu, sekarang Laravel Setting hanya akan melakukan query ke database pada akses pertama kali dan seterusnya akan mengambil nilai database melalui penyimpanan cache. Ketika nilai pengaturan diupdate, maka secara Mekanis cache akan terhapus dan diganti dengan nilai yang baru

READ  Mengenal Visual Studio Code dan 6 Fiturnya yang Bermanfaat

Engkau dapat membandingkannya menggunakan tools Laravel Clockwork.

Tanpa Cache

Tanpa Cache

Dengan Cache

Dengan Cache

Terakhir

Apa yang telah dijelasakn pada postingan ini adalah penggunaan sederahana Laravel Settings. Buat Menyaksikan dokumentasi yang lebih lengkap, Engkau Dapat langsung mengunjungi link repositori dan packagist Buat package ini melalui link berikut:

Engkau juga Dapat berkontribusi Buat mengembangkan package ini Kalau Engkau merasa package ini bermanfaat.

Terima kasih!