Menguasai Dasar-Dasar Perintah pada Laravel: Tips dan Trik yang Harus Diketahui

Hi teman-teman kali ini saya akan shering tips perintah dasar pada framework Laravel, dimulai dari membuat controller, model, database migration, seeder, faker factory, middleware dan masih banyak lagi yang perintah dasar pada laravel ini saya dirangkum berdasar pengalaman dalam pengembangan aplikasi dengan menggunakan laravel.

Dengan tips ini semoga menjadi referensi dan bisa menggigatkan dan mempercepat didalam pengembangan aplilkasi dengan menggunakan laravel.

Urutan Pembuatan MVC pada Laravel :

php artisan help (migrate:status) bantuan

Model

php artisan make:model -m Flight (membuat model dan migration)

Migration

php artisan make:migration create_flights_table (membuat file migrasi baru)<br>php artisan migrate (menjalankan migrasi)<br>php artisan migrate:status (status migrasi)<br>php artisan migrate:rollback (mengembalikan migrasi satu tingkat)<br>php artisan migrate:fresh (menghapus migrate dan menjalankan kembali file migrate)

Controller

php artisan make:controller PhotoController (membuat controller)<br>php artisan make:controller -r MotorController (membuat controller dan resource controler)
  • Membuat Controller yang terhubung dengan model (Spesifik resource model) agar bisa menggunakan slug tanpa id
    php artisan make:controller PhotoController –model=Photo –resource

Seeder

php artisan make:seeder UserSeeder (membuat seeder)
php artisan db:seed (menjalankan seeder)

Contoh :
Motor::create([
‘nama_motor’ => ‘Honda Beat’,
‘merek_id’ => 1,
‘warna’ => ‘Hitam’,
‘harga’ => 1000000,
‘image’ => ‘default.jpg’
]);

Factory

  • php artisan make:factory MotorFactory (membuat factory)
  • Seting Lokasi Faker Locale Indonesia :
  1. App/config/app.php
    Tambahkan kode berikut
  • Faker_locale => env(‘FAKER_LOCALE’, ‘en_US’)
  1. Tambahkan kode berikut di .env
    FAKER_LOCALE=id_ID
  2. Masukan jumlah data Factory ke DatabaseSeeder
    Motor::factory(20)->create(); / menambahkan 20 data motor random
  3. Masukan database property Motor yang akan dibuat di MotorFactory return [
    ‘nama_motor’ => $this->faker->sentence(2),
    ‘merek_id’ => $this->faker->numberBetween(1, 3),
    ‘warna’ => $this->faker->colorName(),
    ‘harga’ => $this->faker->numberBetween(1000, 2000),
    ‘image’ => $this->faker->image(null, 640, 480)
    ];

Faker Doc (dokumentasi Faker)

Cara menjalankan Tinker

php artisan tinker
$user = new App\Models\User;
$user = new User;
$user->name = ‘Affanul hakim’
$user->email = ‘affanul@gmail.com’
$user->password = bcrypt(‘coba)
$user->save()

  • Menampilkan data di tinker
    $user->all()
    $user->first()
    $user->find(1)
    $user->findOrfail(10) (dengan pesan kesalahan)

Paginate

untuk mengaktifkan link paginate tambahkan (laravel 9)
Use bootstrap
App\Providers\AppServiceProvider
public function boot()
{
Paginator::useBootstrapFive();

}

Relationship

  • one to one
    class Post extends Model
    {
    /**
    • Get the category that owns the post.
      */
      public function category()
      {
      return $this->belongsTo(Category::class);
      }
      }
  • one to many
    class Post extends Model
    {
    /**
    • Get the comments for the blog post.
      */
      public function comments()
      {
      return $this->hasMany(Comment::class);
      }
      }
  • Menampilkan berdasar kategori
  • {{ $post->category->nama }}

Problem N + 1

Install Library : https://github.com/itsgoingd/clockwork
Install extention chome : clockwork

Untuk melihat di browser chorme, klik kanan di halaman + inspect + clockwork

Dokumentasi Larevel

Eager Loading

  • Tambahkan fungsi with untuk mengatasi N+1 problem
  • masukan nama tabel relasi kedalam fungsi with
  • Contoh 1
    $books = Book::with(‘author’)->get();

foreach ($books as $book) {
echo $book->author->name;
}

  • Contoh 2, menambah nama kategori didalam fungsi (with) disini menambah kategori merek karena Controller motor memili relasi dengan kategori merek : Motor::with([‘merek’])

class MotorController extends Controller
{
public function index()
{
return view(‘motor.index’, [
‘motor’ => Motor::with([‘merek’])->orderByDesc(‘id’)->filter(request([‘search’]))->paginate(10)
]);
}
}

Lazy Eager Loading, tambahkan fungsi load dengan nama tabel relasi : $books->load(‘author’, ‘publisher’)

$books = Book::all();

if ($someCondition) {
$books->load(‘author’, ‘publisher’);
}

View Blade

  • Navbar
    Operator ternari, apabila variabel title berisi home maka tampilkan active pada navbar :
    {{ ($title === “home”) ? ‘active’ : ” }}

Flash data, key Flash Data

  • Membuat redirect halaman login, sekaligus menampilkan flash data

return redirect(‘/login_wpu’)->with(‘success_message’, ‘Registration successfull! Pleace login’);

  • menampilkan flash data dengan bootstrap @if (session()->has(‘success’))

{{ session(‘success’) }}

@endif

Validasi Data : key Validation, pada form registrasi user

  $validatedData =  $request->validate([
        'name' => 'required|max:255',
        'username' => 'required', 'min:3', 'max:255', 'unique:users',
        'email' => 'required|email:dns|unique:users',
        'password' => 'required|min:5|max:255'
    ]);

// Cara encript password dengan hash
$validatedData[‘password’] = Hash::make($validatedData[‘password’]);

// Sukses validasi input data ke Database
User::create($validatedData);

# Notifikasi pada form input
Agar user tidak perlu mengetik lagi input pada form maka masukan fungsi old data pada : value=”{{ old(‘name’) }}


Name
@error(‘name’)

{{ $message }}
@enderror

Autentification, Contoh Form Login, key Authentication

  • Contoh Fungsi Autentikasi Input Login User : public function autenticate(Request $request)
    {
    $credentials = $request->validate([
    ’email’ => ‘required|email:dns’,
    ‘password’ => ‘required’
    ]);
    // Jika user lolos autentikasi, benar email & password redirect ke Dashboard
    if (Auth::attempt($credentials)) {
    $request->session()->regenerate();
    return redirect()->intended(‘/dashboard’);
    }
    // jika user tidak lolos autentikasi, redirect ke login dengan pesan login error
    return back()->with(‘loginError’, ‘Login failed’);
    }

------------------------- ### Midleware Default ### -------------------------

  • Secara default midelware otomatis berjalan dalam laravel, seting midelware berada dalam folder : App/Http/Kernel
  • user yang sudah autentifikasi dengan fungsi : Auth
  • user yang belum autentikasi : guest

Merubah redirect autentikasi di file : App\Providers\RouteServiceProvider
Rubah redirect ke halaman yang diinginkan apabila user berhasil login/autentikasi benar :

public const HOME = ‘/posts’;

  • Contoh Tag Menampilkan data auth :
    @auth
    tampilkan apabila user login/autentikasi
    @else
    tampilkan apabila user belum login/autentikasi
    @endauth
  • Apabila mengakses halaman/route user yang belum login maka default midleware akan mengarahkan ke halaman (login) App\Http\Middleware\Autenticate Tidak ada Route (Login) halaman tidak bisa diakses/dibatasi login maka dibuatkan name route : name(‘login’)

Route::get(‘/login_wpu’, [LoginWpuController::class, ‘index’])->name(‘login’)->middleware(‘guest’);

   ---------------------------------------------------    
   #### Membuat Middleware dan Autorization ####
   ---------------------------------------------------
  1. Buat Middleware baru dengan comandpalete VSCode, atau demgan perintah dibawah ini, berikan nama (IsAdmin)
    php artisan make:midlleware IsAdmin, atau command palete vscode // Otentikasi User Autorization, Otorisasi akun admin dan akun user biasa
    // Jika user belum login atau User selain admin tidak bisa akses kategori
  • masukan kode berikut pada Middleware IsAdmin // jika belum login dan bukan admin -> forbiden
    if (!auth()->check() || !auth()->user()->is_admin) {
    abort(403);
    } return $next($request);
  1. Daftarkan di Kernel Middleware yang kita buat App\Http\Kernel.
    ‘is_admin’ => \App\Http\Middleware\IsAdmin::class
  2. Tambahkan Middleware is_admin di route kategori/merek yang akan kita autorization, dimana hanya admin yang bisa mengaksesnya bukan user biasa
    Route::resource(‘/merek’, MerekController::class)->except(‘show’)->middleware(‘is_admin’);

Gate untuk membatasi user mengakses halaman/kategori controller tertentu khusus admin

  1. Buat gate baru tambahkan skrip berikut di file App\Providers\AppServiceProvider.php didalam fungsi boot Gate::define(‘admin’, function (User $user) {
    return $user->is_admin;
    });
  2. Buat Database Migration (add_is_admin_to_user_table) dengan nama kolom baru is_admin pada tabel users, default false apabila belum ada kolom is_admin pada tabel user. $table->boolean(‘is_admin’)->default(false); $table->dropColumn(‘is_admin’);
  3. Daftarkan Autorization Gate pada file App\Providers\AppServiceProvider.php menjadi contoh berikut merubah dari koding gate sebelumnya : Gate::define(‘admin’, function (User $user) {
    return $user->is_admin;
    });

7 Masukan kode ( @can )Autorization Gate pada view Blade, maka halaman kategori akan hilang dan tidak bisa diakses kecuali user admin
@can(‘admin’)
Link halaman kategori admin
@endcan

 -----------------------------------------
 ##### Cara Membuat Slug di Laravel  #####
 -----------------------------------------
  • Slug dibuat dengan library eloquent-sluggable
  • Dokumentasi : https://github.com/cviebrock/eloquent-sluggable#eloquent-sluggable
  1. Instal librari eloquent sluggabel.
    Buat Controller resource baru dengan dengan comandpalete VScode
  • atau ketikan perintah membuat controller resource :
    php artisan make:controller BeritaController –model=Berita –resource –requests
  1. Tambah Route diatas route berita, untuk mengirim ke fungsi checkSlug ke controller berita :
    // Route, Request slug berita
    Route::get(‘/dashboard/berita/checkSlug’, [BeritaController::class, ‘checkSlug’])->middleware(‘auth’);
    //Route resource berita
    Route::resource(‘/dashboard/berita’, DashboardBeritaController::class)->middleware(‘auth’);
  2. Controller Berita, tambahkan namespace :
    use \Cviebrock\EloquentSluggable\Services\SlugService;
  • Parameter fungsi pada controller penamaannya disesuaikan dengan nama Routelist, contoh :
    public function show(Berita $beritum)
    {
    // parameter Berita disesuaikan dengan parameter route list, maka parameter menjadi ( $beritum )
    return view(‘dashboard.berita.show’, [
    ‘berita’ => $beritum
    ]);
    }
  1. Masukan fungsi checkslug :
    public function checkSlug(Request $request)
    {
    $slug = SlugService::createSlug(Berita::class, ‘slug’, $request->judul);
    return response()->json([‘slug’ => $slug]);
    }
  2. Pada Model Berita tambahkan use slugable dan getRoutekeyName dan sluggable

use Cviebrock\EloquentSluggable\Sluggable;

use Sluggable;

public function getRouteKeyName()
{
return ‘slug’;
}

public function sluggable(): array
{
    return [
        'slug' => [
            'source' => 'judul'
        ]
    ];
}
  1. Form View Create Berita, masukan kode Javascript untuk membuat slug di form post, dengan nama id field judul dan slug :
    // menggunakan library eloquent-sluggable
    const judul = document.querySelector(‘#judul’);
    const slug = document.querySelector(‘#slug’);

judul.addEventListener(‘change’, function() {
fetch(‘/dashboard/berita/checkSlug?judul=’ + judul.value)
.then(response => response.json())
.then(data => slug.value = data.slug)

});

Untuk lebih lengkapnya teman-teman bisa membaca dokumentasi resmi laravel.com

Ikuti tulisan menarik lainya di blog ini :

  1. Manfaat Restfull API
  2. Rekomendasi 5 Template Admin Populer Bootstrap

Terima kasih teman-teman telah membaca blog ini sampai selesai, tulisan ini bisa teman-teman dapat di github affanul hakim untuk update terkini, terima kasih.

Share and Enjoy !

You may also like...