0% found this document useful (0 votes)
4 views

Modul Belajar Laravel Part 4

The document provides a step-by-step guide to implement like and dislike buttons for posts in a web application. It includes modifications to various files such as dashboard.php, index.blade.php, PostController, web.php, and the Like and Post models to support the new functionality. The instructions ensure that each user can only like or dislike a post once and include code snippets for each required change.

Uploaded by

Ujang K
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Modul Belajar Laravel Part 4

The document provides a step-by-step guide to implement like and dislike buttons for posts in a web application. It includes modifications to various files such as dashboard.php, index.blade.php, PostController, web.php, and the Like and Post models to support the new functionality. The instructions ensure that each user can only like or dislike a post once and include code snippets for each required change.

Uploaded by

Ujang K
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

MODUL UKK PART 4

MEMBUAT TOMBOL LIKE DAN DISLIKE

1. Buka dashboard.php
Pada dashboard.blade.php ubah kode program

<h2><a href="/tambahposts">Tambah Postingan</a></h2>

Menjadi

<h2><a href="/posts">Lihat Postingan</a></h2>

Agar ketika diklik mengarah linknya mengarah langsung ke postingan.


2. Buka indexblade.php
Kita akan membuat fitur dislike pada postingan. Agar satu user hanya bisa satu kali like
Ubah index.blade.php menjadi seperti berikut

<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Postingan</title>
</head>
<body>

<h1>Daftar Postingan Foto</h1>


<h2> <a href="/dashboard">Beranda</a></h2>
@if(session('success'))
<div>{{ session('success') }}</div>
@endif
<div>
<a href="{{ route('post.create') }}">Tambah Postingan</a>
</div>
<div>
@foreach($posts as $post)
<div>
<a href="{{ route('posts.show', $post->id) }}" class="btn btn-sm btn-
dark"><img src="{{ asset('images/' . $post->image) }}" alt="{{ $post->caption }}"
width="300"></a>
<p>{{ $post->caption }}</p>
<p>Jumlah Likes:<b> {{ isset($post->likes) ? $post->likes->count() : 0 }}
</b></p>
@if ($post->likedBy(auth()->user()))
<form action="{{ route('posts.toggleLike', $post) }}" method="post">
@csrf
@method('POST')
<button type="submit">Dislike</button>
</form>
@else
<!-- Jika pengguna belum memberikan like, tampilkan tombol like -->
<form action="{{ route('posts.toggleLike', $post) }}" method="post">
@csrf
@method('POST')
<button type="submit">Like</button>
</form>
@endif

<p>{{ $post->content }}</p>

@if($post->comments->isNotEmpty())
<h3>Komentar: <b> {{ isset($post->comments) ? $post->comments->count() : 0 }}
</b></h3>

@else
<p>Tidak ada komentar</p>
@endif

<form action="{{ route('comment.store') }}" method="POST">


@csrf
<input type="hidden" name="post_id" value="{{ $post->id }}">
<input type="text" name="content" placeholder="Tambah Komentar">
<button type="submit">Komentar</button>
</form>
</div>
@endforeach
</div>
</body>
</html>

3. Buka PostController
Ubah kode program pada PostController seperti berikut
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use App\Models\Comment;

class PostController extends Controller


{
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}

public function create()


{
return view('posts.create');
}

public function store(Request $request)


{
$request->validate([
'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
'caption' => 'required|string|max:255',
]);

$image = $request->file('image');
$imageName = time() . '.' . $image->extension();
$image->move(public_path('images'), $imageName);

Post::create([
'image' => $imageName,
'caption' => $request->caption,
]);

return redirect('posts')->with('success', 'Data telah ditambahkan.');


}

public function show(Post $post)


{
return view('posts.show', compact('post'));
}
public function like(Post $post)
{
if (!$post->likedBy(auth()->user())) {
$post->likes()->attach(auth()->id());
} else {
$post->likes()->detach(auth()->id());
}
return redirect()->back()->with('success', 'Tindakan suka berhasil.');
}

public function comment(Request $request)


{
$request->validate([
'post_id' => 'required|exists:posts,id',
'content' => 'required|string',
]);

Comment::create([
'post_id' => $request->post_id,
'user_id' => auth()->id(),
'content' => $request->content,
]);

return redirect()->back()->with('success', 'Komentar ditambahkan.');


}

public function toggleLike(Post $post)


{
if (!$post->likedBy(auth()->user())) {
$post->likes()->attach(auth()->id());
} else {
$post->likes()->detach(auth()->id());
}
return redirect()->back();
}
}

4. Buka web.php kemudian tambahkan kode program berikut pada bagian paling akhir

Route::post('/posts/{post}/toggle-like', [PostController::class, 'toggleLike'])-


>name('posts.toggleLike');

Pastikan kode program web.php diatas hanya satu baris dan pastikan karakter ->
nyambung.
5. Buka model/Like
ubah kode program pada model/Like seperti berikut.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Like extends Model


{
use HasFactory;
protected $fillable = ['user_id']; // Atribut yang dapat diisi secara massal

/**
* Mendapatkan pengguna (user) yang melakukan like.
*/
public function user()
{
return $this->belongsTo(User::class);
}

/**
* Mendapatkan entitas yang dilakukan like (misalnya, post).
*/
public function likeable()
{
return $this->morphTo();
}
}

6. Buka model/post
Definisikan likedBy pada model post. Ubah model/Post seperti berikut

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $fillable = [
'image',
'caption',
];
protected $with = ['likes'];
public function likes()
{
return $this->belongsToMany(User::class, 'likes', 'post_id', 'user_id');
}

public function comments()


{
return $this->hasMany(Comment::class);
}
public function likedBy(User $user)
{
return $this->likes()->where('user_id', $user->id)->exists();
}

public function toggleLikeBy(User $user)


{
if ($this->likedBy($user)) {
$this->likes()->where('user_id', $user->id)->delete();
} else {
$this->likes()->create(['user_id' => $user->id]);
}
}
}

Uji programnya

You might also like