Cara Integrasi Laravel 8 dengan Laravel-AdminLTE


Tepat 8 September 2020 kemarin, Laravel mengeluarkan versi mayor terbarunya, yaitu Laravel 8. Laravel versi anyar ini membawa perubahan yang banyak dalam framework Laravel. Sebagai pengguna Laravel kita harus kembali menyesuaikan kembali dengan perubahan tersebut, tidak hanya bagi kita yang baru memulai mempelajarinya di versi 6 atau 7.

Sebagai pengembang web, tentu kita perlu yang namanya dashboard atau halaman administrator yang berfungsi untuk memanage konten di halaman muka web. AdminLTE merupakah salah satu dari template admin Bootstrap yang cukup populer digunakan sebagai halaman dashboard bagi aplikasi berbasis web, termasuk juga digunakan untuk aplikasi Laravel.

Mengintegrasikan Laravel dengan AdminLTE bisa dengan mudah kita lakukan dengan menggunakan paket Laravel-AdminLTE yang menggunakan AdminLTE versi 3 (Bootstrap 4). Tulisan ini adalah update dari tulisan sebelumnya yang menggunakan Laravel 7 sehingga ada bagian-bagian yang punya kesamaan dalam proses inetgrasi.

Instalasi Laravel 8

Pertama-tama kita harus instalasi Laravel 8, kami menggunakan Laravel Installer. Jika kalian belum menginstal Laravel Installer di komputer kalian, gunakan perintah berikut untuk melakukan instalasi:

composer global require laravel/installer

Untuk update Laravel Installer kalian bisa melakukannya dengan cara:

composer global update laravel/installer
//atau
composer global remove laravel/installer
composer global require laravel/installer

Jika kalian pengguna Windows, kalian harus menambahkan variable 'laravel' pada Environment Variables agar bisa memanggil perintah Laravel Installer.

%USERPROFILE%\AppData\Roaming\Composer\vendor\bin

Pastikan laravel installer kalian sudah di-update ke versi 4.

D:\>laravel --version
Laravel Installer 4.2.5

Kemudian ketik:

laravel new nama_projectmu

Nama projectnya akan kami beri nama l8-adminlte.

laravel new l8-adminlte

Bila kalian lebih suka menggunakan via composer kalian bisa menggunakan perintah berikut:

composer create-project laravel/laravel l8-adminlte

Tunggu hingga proses selesai.

Application ready! Build something amazing.

Instalasi Laravel-AdminLTE

Setelah berhasil membuat folder project Laravel 8, selanjutnya menginstal package Laravel-AdminLTE. Masuk ke dalam folder project l8-adminlte:

cd l8-adminlte

Kemudian ketik perintah Composer berikut untuk melakukan instalasi package laravel-adminlte:

composer require jeroennoten/laravel-adminlte

Setelah itu lanjutkan dengan perintah berikut:

php artisan adminlte:install

Perintah di atas akan menambahkan vendor asset di folder public, juga akan mempublish file config di folder config, yaitu adminlte.php, dan juga file translasi di resources/lang/vendor

Instalasi Laravel/ui

Jika sebelumnya di versi Laravel 7 kita masih bisa menemukan Frontend Scaffolding untuk UI, saat ini di versi 8, untuk urusan UI, Laravel menggunakan Laravel Jetstream. Namun, bukan berarti kita tidak bisa menggunakan laravel/ui di Laravel 8 karena laravel/ui di versi 7 pun hanyalah opsional.

composer require laravel/ui

Generate Controller dan View laravel/ui

Gunakan perintah di bawah ini untuk menggenerate file controller dan view blade yang akan menangani otentikasi seperti login, register, forget password, dan lain-lain.

php artisan ui bootstrap --auth

Kemudian akan muncul permintaan untuk menjalankan perintah "npm install && npm run dev", jalankan perintah berikut:

npm install && npm run dev

Jika muncul pesan berikut:

Additional dependencies must be installed. This will only take a moment.
Running: npm install resolve-url-loader@^3.1.2 --save-dev --legacy-peer-
 deps
Finished. Please run Mix again.

Jalankan kembali:

npm run dev

Membuat Database

Kalian bisa membuat database menggunakan PhpMyAdmin, HeidiSQL, atau menggunakan Command Prompt. Pada contoh di bawah ini, kita menggunakan Command Prompt.

mysql -u root -p
//ketik password user mysql atau root secara default jika kita belum pernah mengubahnya
create database l8_adminlte; 
quit //keluar

Kami memberi nama databasenya sesuai dengan nama folder projectnya l8-adminlte. Anda bisa menyesuaikan untuk nama database anda sesuai dengan project anda.

Memasukkan Folder Project ke dalam VSCode

Ketik dalam folder melalui command prompt:

code .

Bila perintah ini gagal mungkin kalian belum mengatur settingan pada VSCode, caranya kalian bisa lihat di sini.

Setting Database di .env Laravel

Buka file .env lalu tujulah pada baris berikut:

DB_DATABASE=l8_adminlte
DB_USERNAME=root
DB_PASSWORD=

Sesuaikan dengan database anda, misal:

DB_DATABASE=l8_adminlte
DB_USERNAME=root
DB_PASSWORD=root

Jalankan Migrate

php artisan migrate

Replace View Auth Laravel dengan View Auth Laravel AdminLTE

Kita perlu mengubah tampilan login, register, dll bawaan view auth dari laravel/ui ke tampilan Auth Laravel AdminLTE.

php artisan adminlte:install --only=auth_views

Ketik: yes, pada pertanyaan yang muncul: The authentication views already exists. Want to replace the views? (yes/no) [no]:

Jalankan Server

php artisan serve

Buka Browser, ketik: localhost:8000


Pergi ke halaman Register dengan klik menu "Register".


Isikan ke dalam form untuk data user. Klik tombol "Register", setelah itu anda akan masuk ke dalam dashboard.

Tampak pada halaman Home Dashboard default laravel UI.


Sekarang untuk mengubah tampilannya kita akan mulai menggunakan tampilan layout dan asset AdminLTE.

Pergi ke resources/views/home.blade.php.

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Dashboard') }}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    {{ __('You are logged in!') }}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Hapus semua isinya dan ganti dengan:

@extends('adminlte::page')

@section('title', 'Dashboard')

@section('content_header')
    <h1>Dashboard</h1>
@stop

@section('content')
    <p>Welcome to this beautiful admin panel.</p>
@stop

@section('css')
    <link rel="stylesheet" href="/css/admin_custom.css">
@stop

@section('js')
    <script> console.log('Hi!'); </script>
@stop

Hasilnya:


Menampilkan Foto User di Top Navbar

Bila kita perhatikan di isi sebelah kanan atas, terlihat nama user, yaitu Admin, di sebelah namanya sebenarnya kita bisa menampilkan foto atau avatar kaena versi Laravel-AdminLTE saat ini sudah mendukung untuk menampilkan avatar.

Buka model User.php yang kini berada di dalam folder app/Models, tambahkan kode berikut setelah method $casts:

public function adminlte_image()
{
    return 'https://picsum.photos/300/300';
}

public function adminlte_desc()
{
    return 'That\'s a nice guy';
}

public function adminlte_profile_url()
{
    return 'profile/username';
}

Selanjutnya buka config/adminlte.php, lalu tuju bagian setting menu user pada baris nomor 67 - 72 .

'usermenu_enabled' => true,
'usermenu_header' => false,
'usermenu_header_class' => 'bg-primary',
'usermenu_image' => false,
'usermenu_desc' => false,
'usermenu_profile_url' => false,

Set nilainya menjadi seperti berikut:

'usermenu_enabled' => true,
'usermenu_header' => true,
'usermenu_header_class' => 'bg-primary',
'usermenu_image' => true,
'usermenu_desc' => true,
'usermenu_profile_url' => true,

Hasilnya:


Foto User akan tampil berbeda-beda setiap kali kita refresh halaman karena memangil url https://picsum.photos/300/300. Kita bisa menggantinya dengan memanggil gambar yang kita miliki di dalam folder public.

Siapkan gambar yang akan kita gunakan sebagai foto user. Gunakan gambar persegi minimal 300×300 dengan ekstensi .jpgatau .png. Buat folder imagesdi dalam folder public. Letakkan gambar tersebut ke dalam folder public/images.

Lalu buka kembali file app/User.php, ganti url yang mengarah ke situs picsum.photo dengan url path folder yang baru kita bua, yaitu images/nama_file_gambar.extension.

Misal, gambar yang kami untuk avatar adalah incognito.png

public function adminlte_image()
{
    return asset('images/incognito.png');
}

Hasilnya:


Bila kalian ingin menggunakan avatar yang dinamis sesuai dengan user yang login maka kalian perlu menambahkan kolom pada table user, misal "avatar" untuk menyimpan nama file image yang akan digunakan sebagai avatar.

Jadi kalian bisa memanggilnya sebagai berikut:

public function adminlte_image()
{
    return asset('images/'.Auth::user()->avatar);
}

Mengubah Link Profile


URL pada link Profile secara default adalah /profile/username sehingga kita perlu mengubahnya, caranya pergi ke Models/Users.php.

public function adminlte_profile_url()
{
    return 'profile/username';
}

Karena kita belum memiliki kolom username pada table users, jadi kita akan menggantinya dengan:

public function adminlte_profile_url()
{
    return 'profile';
}

Sehingga sekarang url link profile kita adalah /profile. Selanjutnya pergi ke routes/web.php dan letakkan baris kode berikut:

Route::get('/profile', [App\Http\Controllers\ProfileController::class, 'index'])->name('profile');

Kemudian kita buat ProfileController dengan perintah artisan:

php artisan make:controller ProfileController --resource

Pada file ProfileController di dalam folder app/Http/Controllers, letakkan di dalam method index:

...
use Illuminate\Support\Facades\Auth;

class ProfileController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $user = Auth::user()->name;
        return view('profile', compact('user'));
    }

Pastikan kalian telah menambahkan use Illuminate\Support\Facades\Auth di atas agar tidak terjadi error:

Class 'App\Http\Controllers\Auth' not found
p>Lalu, kita pergi ke resources/views, dan buat file baru dengan nama profile.blade.php, isinya:
@extends('adminlte::page')

@section('title', 'Profile')

@section('content_header')
<h1>Profile</h1>
@stop

@section('content')
<p>Hello {{ $user }}, welcome to your profile page</p>
@stop

@section('css')
<link rel="stylesheet" href="/css/admin_custom.css">
@stop

@section('js')
<script> console.log('Hi!'); </script>
@stop

Hasilnya:


Menu Sidebar

Untuk edit menu sidebar, pergi ke config/adminlte, lihat pada bagian menu items.

Kita akan menambahkan menu dashboard dan menghapus menu-menu yang tidak diperlukan pada sidebar.

Buka config/adminlte.php, pergi ke baris nomor 266, ubah menjadi:

'menu' => [
    [
        'text'   => 'search',
        'search' => true,
        'topnav' => true,
    ],
    [
        'text' => 'Dashboard',
        'url'  => '/home',
        'icon' => 'fas fa-fw fa-home',
    ],
    ['header' => 'account_settings'],
    [
        'text' => 'profile',
        'url'  => 'profile',
        'icon' => 'fas fa-fw fa-user',
    ],
    [
        'text' => 'change_password',
        'url'  => 'change-password',
        'icon' => 'fas fa-fw fa-lock',
    ],
],

Hasilnya:


Laravel Mix

Jika kalian ingin menggunakan satu file asset saja untuk css dan js, seperti app.css dan app.js sehingga tampil lebih ringkas maka kalian perlu mengkompile asset dari vendor yang diperlukan menggunakan Laravel Mix.

Sebelumnya kalian perlu menginstal fontawesome, icheck-bootstrap, dan overlayscrollbars:

npm i @fortawesome/fontawesome-free icheck-bootstrap overlayscrollbars
npm i --save-dev @babel/plugin-external-helpers

Setelah selesai menginstal, buka file boostrap.js yang berada dalam folder resources/js, tambahkan setelah baris window.$ = window.jQuery = require('jquery');:

require('overlayscrollbars');
require('../../vendor/almasaeed2010/adminlte/dist/js/adminlte');

Kemudian buka file app.scss yan berada dalam folder sass, replace isinya dengan isi sebagai berikut:

// Fonts
@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic');
@import '~@fortawesome/fontawesome-free/css/all.css';
// OverlayScrollbars
@import '~overlayscrollbars/css/OverlayScrollbars.css';
// iCheck
@import '~icheck-bootstrap/icheck-bootstrap.css';
// AdminLTE
@import '../../vendor/almasaeed2010/adminlte/dist/css/adminlte.css';
// Bootstrap
// Already imported by AdminLTE
//@import '~bootstrap/scss/bootstrap';

Berikutnya buka file config adminlte.php di folder config lalu ubah nilai pada baris 210 dari false menjadi true

'enabled_laravel_mix' => true,

Terakhir jalankan perintah:

npm run dev

Jika terdapat masalah pada menu yang tidak bisa diklik atau tampilannya seperti berikut:


Buka kembali file bootstrap.js, perhatikan pada baris berikut:

require('../../vendor/almasaeed2010/adminlte/dist/js/adminlte');

Ganti dengan:

require('../../public/vendor/adminlte/dist/js/adminlte');

Alternatif lain, yaitu dengan menambahkan pada section js:

@section('js')
    <script src="{{ asset('vendor/adminlte/dist/js/adminlte.min.js') }}"></script>
@stop

Cukup sampai di sini pada pembahasan cara integrasi Laravel dengan Laravel-AdminLTe. Semoga bermanfaat.

(Post ini telah diperbaharui pada: 8 Mei 2021)