Laravel Traits


Rafi Taufiqurrahman
A Backend Developer specialized in Laravel
Laravel Traits

Pada artikel kali ini kita akan menggunakan Trait pada laravel

Sebelum mulai kita kenalan dulu yak sama Trait, karna tak kenal maka tak sayang :D.

Trait merupakan sebuah mekanisme yang mirip dengan class untuk mengelompokan sebuah method berdasarkan kegunaannya, agar dapat digunakan kembali (Reusable) di beberapa class tanpa melalui turunan (Inheritence).

Trait memudahkan kita mengelompokkan method sesuai fungsinya namun dapat digunakan di class manapun kita membutuhkannya.

Oke sekarang kita telah mengenal trait, gimana udah pada sayang belum ? :D

Kalo belum yuk kita cobaiin trait pada project laravel kita, Disini kita akan mengambil contoh kasus query untuk melakukan upload gambar. Biasanya kita melakukan perulangan penulisan query hanya untuk melakukan upload gambar biasa untuk method store dan update nah disini kita akan melakukan perluangan query tersebut sebanyak kita memiliki tabel yang mewajibkan kita untuk melakukan upload gambar selain query yang panjang, controller kita juga terlihat tidak terlalu bagus, contoh nya seperti ini :

    public function store(Request $request)
    {
        $image = $request->file('image');
        $image->storeAs('public/categories/', $image->hashName());

        Category::create([
            'name' => $request->name,
            'slug' => Str::slug($request->name),
            'image' => $image->hashName(),
        ]);
    }

    public function update(Request $request, Category $category)
    {
        if($request->file('image')){
            Storage::disk('local')->delete('public/categories/'. basename($category->image));

            $image = $request->file('image');
            $image->storeAs('public/categories/', $image->hashName());

            $category->update([
                'name' => $request->name,
                'slug' => Str::slug($request->name),
                'image' => $image->hashName(),
            ]);
        }
        $category->update([
            'name' => $request->name,
            'slug' => Str::slug($request->name),
        ]);
    }

Seperti gambar di atas kita melakukan perulangan dalam melakukan query upload gambar pada method store dan update sehingga membuat controller kita menjadi sangat panjang oleh karna itu kita bisa memanfaatkan trait sebagai alat bantu agar controller yang kita miliki menjadi lebih singkat dan clean.

Oke langsung aja ya, langkah awal kita bisa membuat sebuah folder pada App\Http kemudian buat folder baru dengan nama Traits setelah selesai membuat folder tersebut kita akan memiliki sebuah struktur folder seperti ini App\Http\Traits:

Imgur

langkah selanjutnya kita akan membuat sebuah file baru pada folder Traits kita dan akan kita beri nama HasImage.php sehingga struktur folder kita akan seperti ini App\Http\Traits\HasImage.php: Imgur

oke berikutnya kita akan mencoba membuat sebuah method didalam HasImage.php kurang lebih seperti ini :

<?php

namespace App\Traits;

trait HasImage
{
    public function uploadImage($request, $path)
    {
        $image = null;

        if($request->file('image')){
            $image = $request->file('image);
            $image->storeAs($path, $image->hashName());
        }

        return $image;
    }
}

diatas kita membuat sebuah method dengan 2 pamater yaitu request dan path, dimana request ini menjadi paramater untuk menangkap request yang kita berikan dari sebuah name dan path sebagai tempat penyimpanan gambar.

Terus bagimana cara memanggil trait didalam controller ? mudah kok gini caranya , untuk memanggil sebuah traits kita harus memanggil kata kunci yaitu use seperti code di bawah :

<?php

namespace App\Http\Controllers;

use App\Models\Category;
use App\Traits\HasImage;

class CategoryController extends Controller
{
    use HasImage; 
}

setelah berhasil memangil trait saatnya kita implementasikan trait tersebut pada code di controller kita,

<?php

namespace App\Http\Controllers;

use App\Models\Category;
use App\Traits\HasImage;

class CategoryController extends Controller
{
    use HasImage; 

    public function store(Request $request)
    {
        $image = $this->uploadImage($request, $path = 'public/categories/');

        Category::create([
            'name' => $request->name,
            'slug' => Str::slug($request->name),
            'image' => $image->hashName(),
        ]);
    }

    public function update(Request $request, Category $category)
    {
        $image = $this->uploadImage($request, $path = 'public/categories/');

        if($request->file('image')){
            Storage::disk('local')->delete('public/categories/'. basename($category->image));

            $category->update([
                'name' => $request->name,
                'slug' => Str::slug($request->name),
                'image' => $image->hashName(),
            ]);
        }
        $category->update([
            'name' => $request->name,
            'slug' => Str::slug($request->name),
        ]);
    }
}

Pada code diatas kita melakukan pemanggilan sebuah method uploadImage yang berada pada sebuah trait HasImage yang telah kita buat sebelumnya dengan code berikut : $image = $this->uploadImage($request, $path='public/categories/'); kemudian kita memasukan 2 paramater wajib yang harus kita definisikan sebagai kunci agar trait dapat kita gunakan.

Sampai disini dulu ya artikel kali ini, kita ketemu lagi di next artikel ya, kalo ada pertanyaan silahkan cantumkan di kolom komentar :D

Terima kasih.


Rafi Taufiqurrahman
A Backend Developer specialized in Laravel

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami