Anda di halaman 1dari 4

>> Kita kasih validasi di dalam method storenya, tetapi sebelum itu, kita bikin

variable
baru namanya validatedData, ini mirip dengan apa yang kita lakukan di dalam
registrasi
Isi dari variablenya adalah variable request lalu kita validate

>> Di dalamnya kita kasih rules seperti title harus required dan maksimal 255
karakter, slug
required dan dia unique dari tabel post, ini untuk menjaga ketika nanti user
mengupdate
slug secara manual, padahal library kita udah bisa membuat unique

>> Jika user tetep mau slugnya yang sama dengan yang ada di database, maka sudah
diberi validasi
agar datanya unique. Lalu category_idnya harus required, dan body juga
required.Data yang
belum adalah excerpt
Misal :
public function store(Request $request)
{
$validatedData = $request->validate([
'title' => 'required|Max:255',
'slug' => 'required|unique:posts',
'category_id' => 'required',
'body' => 'required'
]);
}

>> Excerpt nanti kita akan buat manual, dan kita juga butuh user_id, published_at,
belum
kita jalanin, ini belakangan. Untuk sementara kita save dlu, validasi kita akan
coba dulu
Klo kita balik ke web kita, klo kita langsung klik button create post, maka
validasinya
sudah jalan, tapi sebaiknya kita kirim pesan kesalahannya

>> Kita akan beri pesan kesalahannya di setiap inputnya.


Misal :
<label for="slug" class="form-label">Slug</label>
<input type="text" class="form-control @error ('slug') is-invalid
@enderror" id="slug" name="slug" disabled readonly>
@error('slug')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror

>> Untuk yang category, sebetulnya kita gk perlu memberi pesan kesalahan, dan
sebetulnya kita gk
perlu melakukan validasi, tapi ini supaya nanti data di validatedDatanya masuk
kita simpan
di validasi

>> Untuk yang body, karena yang body adalah editor yang bukan milik bootstrap,
jadi kita gk
bisa kasih pesan kesalahan, tapi kalau mau, kita bisa tambahkan di bawah
labelnya sebuah
alert, jadi kalau kita buka lagi bootstrap, kita cari alert
>> Atau kita kasih paragraf, lalu di dalamnya kita kasih blade message, tinggal
kita bungkus
pakai @error di dalamnya ada body. di tag p nya kita kasih class text-danger,
jadi dia
akan muncul ketika terjadi error
Misal :
@error('body')
<p class="text-danger">{{ $message }}</p>
@enderror

>> Jika kita cek di browser, maka jika ada error, maka akan tampil pesan errornya.
Jika kita
mau menangani error message dengan html, kita bisa melakukannya denga memberi
atribut
required di setiap tag inputnya

>> Jadi sebelum lewat validasinya laravel, kita kasih required di htmlnya dan kita
beri
atribut autofocus untuk membuat kursornya mengarah ke kolom inputan.
Selanjutnya kita
kasih method old di dalam atribut value
Misal :
value="{{ old('slug') }}"

>> Untuk category, misalkan kita sudah pilih categorynya, klo kita klik tombol
create post,
pilihannya akan balik ke pilihan utama, padahal tadi sudah pilih opsi yang
lainnya.
Solusinya adalah kita pakai pengkondisian di dalam foreachnya

>> Jika fungsi old() dari category_id sama dengan category_id, jadi kalau sama
dengan
category_id sebelumnya, maka tinggal kita kasih atribut selected, jadi kalau
sama
pilih, tapi kalau selain itu, kita bikin else, dan kita tidak kasih atribut
selectednya
Misal :
@foreach ($categories as $category)
@if (old('category_id') == $category->id)
<option value="{{ $category->id }}"
selected>{{ $category->name }}</option>
@else
<option value="{{ $category->id }}">{{ $category-
>name }}</option>
@endif
@endforeach

>> Jika kita coba di web browser, karena apa yang kita tuliskan berubah menjadi
string, sementara
data $category->id itu berupa integer, maka tidak bisa dilakukan method old(),
jadi
simbol equalsnya dibikin 2, bukan 3

>> Tinggal yang bodynya untuk bodynya kita bisa menambahkan atribut value yang di
dalamnya
berisi method old() dari body yang ditulis di tag input. Maka validasi kita
aman

>> Selanjutnya, kita coba insert datanya, kita balik ke controllernya, kita baru
ngisi 4
data, kita butuh data yang lain sebelum diinsert, di bawah validasi kita bikin
user_id
nya dlu caranya kita panggil vaidatedData dengan keynya user_id, diisi dengan
nilai
method auth user dan id
Misal :
$validatedData['user_id'] = auth()->user()->id;

>> Untuk excerptnya kita ambil variable validatedData dengan key excerpt, excerpt
ini, kita
akan ngambil dari body, jadi kalau bodynya banyak, kita akan limit hanya 100
karakter
saja

>> Kalau kita buka dokumentasi laravel, cari yang namanya string helpers, dengan
ini, dia
bisa motong string. Jadi kalau kita punya string yang panjang di dalam method
limit,
kalau kita kasih angka, dia akan ngambil 20 karakter, lalu di akhir
ditambahin ...

>> Coba kita panggil, caranya Str::limit() stringnya ngambil dari body, jadi kita
tulis
$request->body, lalu kita kasih limitnya 200 misalnya, lalu setelah limitnya
mau kita kasih
apa, kalau kita hapus ... nya, maka defaultnya akan ... Untuk menggunakan
limit, kita
harus panggil dengan namespace untuk stringnya
Misal :
use Illuminate\Support\Str;
$validatedData['excerpt'] = Str::limit($request->body, 200);

>> Syntax ini dikirim berupa format data yang ada di trix, jadi ada tag2 htmlnya,
kalau mau
dihilangkan tag2nya, caranya kita bisa kita masukin ke dalam fungsinya php
namanya
strip_tags, jadi semua tag html di dalam akan hilang
Misal :
$validatedData['excerpt'] = Str::limit(strip_tags($request->body), 200);

>> Jika sudah, baru kita insert, kita panggil model post lalu gunakan method
create() di
dalamnya kita kasih validatedData. Karena ini sudah lolos validasi

>> Kalau sudah tinggal kita balikin lagi ke halaman post dengan menggunakan
redirect(), sambil
kita kasih pesan sukses dan isi dari pesannya adalah New post has been added
Misal :
Post::create($validatedData);
return redirect('/dashboard/posts')->with('success', 'New post has been
added');

>> Selanjutnya kita kembali ke halaman postnya, kita akan kasih pesan bahwa post
baru sudah
ditambahkan dengan menggunakan alert dengan warna hijau

>> Cara masukkinnya adalah dengan menggunakan seleksi kondisi if, jika session has
success,
maka kita kasih alert yang dari bootstrapnya, pesan isinya adalah method
session dengan
parameter success
Misal :
@if (session()->has('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
</div>
@endif

>> Jika kita coba di web browser, kita insert data, lalu klik create post, maka
kita akan
diarahkan ke tampilan My Post dan ada pesan success muncul, ketika kita klik
back to posts
harusnya ke My Post, tapi jadi ke All Posts frontend

>> Kita harus hapus saja linknya. Dan yang akan kita benerin adalah di file
create, di
bagian form kita kasih class yang namanya mb-5 untuk membuat margin bottomnya
menjadi 5
supaya ada jarak

>> Sekarang, kalau kita bikin postingan yang judulnya sama, maka slug otomatis
akan dibenerin
sama si library kita, otomatis akan menambahkan angka 2, karena sudah ada slug
yang
namanya sama

>> Kalau misalkan kita tetap menuliskan slugnya sesuai dengan yang sudah ada, maka
yang akan
membuat agar slug dijaga agar unique adalah laravel. Kalau kita menggunakan
editor trix
dan bisa nulis tag html, gimana kalau ada user jahat yang menyimpan script
jahat di
web kita

>> Itu sudah ditangani oleh editornya, jadi kalau kita bikin postingan baru dan
kita bikin
bodynya disisipi oleh script javascript, misal di dalam tag scriptnya ada
alert, ini
tidak akan dieksekusi sebagai script javascript

>> Kalau kita save, datanya akan masuk, dan kalau kita cek isinya, dia sudah
otomatis
dilakukan escape karakter, jadi gk usah khawatir kalau nanti disisipin oleh
script
javascript yang merusak website kita

>> Kalau kita ke halaman utama yaitu all post, postingan kita sudah tampil dan ini
postingan
baru, kalau kita klik usernya, sekarang sudah ada postingannya, excerpt sudah
otomatis
ngambil dari body tag sudah ilang semua, dan kalau kita klik read more, maka
lengkap
semua beserta dengan script html di dalamnya

Anda mungkin juga menyukai