• Tidak ada hasil yang ditemukan

Fitur create category ~4

Fitur pertama dari CRUD Category yang akan kita buat adalah fitur create category. Untuk itu mari kita ubah kode CategoryController@create agar menjadi seperti ini:

public function create(){

return view('categories.create');

}

Membuat view untuk create category ~5

Kalo kamu coba untuk akses http://larashop.test/categories/create kamu akan mendapatkan error view not found. Itu karena kita belum membuat view categories.create. Maka, kita buat terlebih dahulu file tersebut yaitu resources/views/categories/create.blade.php, silahkan dibuat terlebih dahulu file viewnya. Buat folder baru categories di resources/views lalu buat file create.blade.php di folder categories tadi. Setelah itu buka filenya dan kita isikan kerangka view kita ini:

@extends('layouts.global')

@section('title') Create Category @endsection

@section('content')

TODO: Form create category

@endsection

Kini jika kamu merefresh halaman http://larashop.test/categories/create, error view not found tidak akan muncul lagi dan kita mendapati tampilan yang berasal dari view categories/create.blade.php.

Setelah itu di bagian section content mari kita berikan form dan inputan untuk membuat category baru

<form

enctype="multipart/form-data"

class="bg-white shadow-sm p-3"

action="{{route('categories.store')}}"

method="POST">

@csrf

</form>

Kode ini merupakan kerangka form kita, kita mengeset atribut enctype bernilai multipart/form-data karena kita akan melakukan upload file. Form ini akan mengirimkan data ke route('categories.store') alias http://larashop.test/categories dengan method POST untuk itu kita set attribute method di form ini bernilai POST. Kemudian kita tambahkan styling template

1

bootstrap 4 pada atribute class="bg-white shadow-sm p-3". Dan yang paling penting jangan ketinggal helper @csrf supaya request yang akan kita kirim melalui form ini valid.

Setelah itu kita tambahkan input untuk category name dan upload image category seperti ini:

<label>Category name</label><br>

<input

<label>Category image</label>

<input

Sehingga kini view categories/create.blade.php menjadi seperti ini:

@extends('layouts.global')

@section('title') Create Category @endsection

@section('content')

<div class="col-md-8">

<form

enctype="multipart/form-data"

class="bg-white shadow-sm p-3"

action="{{route('categories.store')}}"

method="POST">

@csrf

<label>Category name</label><br>

<input

<label>Category image</label>

<input

type="file"

class="form-control"

27

Menangkap request create categories ~5

Form create categories telah siap untuk mengirimkan data category akan tetapi controller kita belum melakukan apa-apa, kita perlu menangkap request data dari form create categories untuk kemudian membuat kategori baru di database:

public function store(Request $request){

$name = $request->get('name');

$new_category = new \App\Category;

$new_category->name = $name;

if($request->file('image')){

$image_path = $request->file('image')

Kode di atas menangkap request dengan nama 'name' ke dalam variabel $name kemudian membuat sebuah instance dari model Category baru dan memberikan nilai name = $name.

Setelah itu melakukan pengecekkan apakah ada request bertipe file dengan nama 'image', kita lakukan dengan kode if($request->file('image')). Jika ada maka kita simpan file tersebut ke dalam folder storage/app/public/category_images, penyimpanan tersebut kita lakukan dengan kode

$request->file('image')->store('category_images', 'public'); Setelah itu path dari file yang baru saja diupload tersebut kita jadikan nilai dari field 'image' pada kategori baru tadi. Kategori baru tersebut belum tersimpan didatabase selama kita belum memanggil $new_category->save(). Jangan kita save terlebih dahulu karena kita ingin memberikan nilai pada created_by, field ini mengindikasikan siapa pembuat category ini, nilai dari created_by adalah ID dari user yang melakukan pembuatan category. Maka kita perlu mengambil id dari user yang sedang login saat ini, untuk itulah sebelum menyimpan kita tambahkan kode berikut ini:

$new_category->created_by = \Auth::user()->id;

1

Kode di atas mengambil nilai id dari user yang sedang login dan berikan ke field created_by,

Ada satu lagi field yang tidak ada di form akan tetapi diperlukan di database, yaitu field slug dan kita bisa menggenerate slug dengan helper \Str::slug() yang ada di Laravel. Maka kita buat terlebih dahulu slug berdasarkan nama kategori seperti ini:

$new_category->slug = Str::slug($name, '-');

Slug merupakan karakter yang tidak menyalahi aturan URL, artinya tidak ada spasi, huruf besar kecil, dsb. Misalnya nama kategori "Sepatu Olahraga" maka dengan \Str::slug("Sepatu Olahraga",

"-") akan menghasilkan "sepatu-olahraga"

Baru setelah itu kita simpan model kategori baru tersebut ke database dengan kode ini:

$new_category->save();

Setelah itu kita redirect kembali ke halaman create category beserta dengan pesan bahwa pembuatan category telah berhasil:

return redirect()->route('categories.create')->with('status', 'Category successfully created');

Sehingga CategoryController@store kita terlihat seperti ini:

public function store(Request $request) {

$name = $request->get('name');

$new_category = new \App\Category;

$new_category->name = $name;

if($request->file('image')){

$new_category->created_by = \Auth::user()->id;

$new_category->slug = \Str::slug($name, '-');

$new_category->save();

return redirect()->route('categories.create')->with('status', 'Category successfully created');

}

Dan satu lagi jangan lupa menambahkan kode berikut ini di view categories/create.blade.php tepat di atas kode pembuka form kita agar pesan flash dapat terbaca: