Laravel에서 좋은 기능을 구현해 보도록 하겠습니다.
13557 단어 Laravel
1. 소개
좋은 기능은 최근 SNS에서 거의 설치되고 있는 기능으로'좋아요','이해','지원'등의 뜻을 나타내는 커뮤니케이션 도구의 일종이다.
좋은 기능이 있으니까.
・(ユーザー視点)多くの投稿からどの投稿が人気もしくは信憑性があるのか。
・(投稿者視点)これまで投稿した記事でどの記事がユーザーの求めている記事なのか。
등 판단의 재료.이번에 PHP를 사용한 프레임워크 Laravel, 실시
いいね機能
.※ 이번에는 라벨 학습을 겸해 서버에 좋은 기능 처리를 설치했습니다.원래의 제품이라면 처리를 줄이기 위해 프론트에 설치하여 처리할 것이라고 생각합니다. 이 점에 관해서는 양해해 주십시오.
1-1. 개발 환경
PHP 및 Laravel의 버전은 다음과 같습니다.
언어 FW
버전
PHP
7.2.26
Laravel
6.17.1
2. 어떤 규격을 채택할 것인가
규격상, 여러 개의'답장'은 한 게시물과 연결되어 있으며, 답장에'이점'을 추가할 수 있다.
상세한 규격의 정의는 다음과 같다.
・初期値はいいねボタンがグレーで、いいねボタンを押すとボタンが緑色になる
・いいね数をいいねボタンの右横に表示する
・いいねボタンを2度押すといいねを取り消すことができる
・自分のリプライに対してもいいねをすることができる
・ログイン中のみに限り、リプライにいいねすることができる
3. 칭찬 기능 설치
그것은 사실상 좋은 기능의 설치에 들어갔다.
3-1. 라우팅 선택
우선, 실용적인 기능을 실현하는 경로를 정의한다.
RepliesControllerのlike()
에서RepliesControllerのunlike()
에 응답 해제에 대한 좋아요를 기술하는 처리로 정의됩니다.web.php
Route::get('/reply/like/{id}', 'RepliesController@like')->name('reply.like');
Route::get('/reply/unlike/{id}', 'RepliesController@unlike')->name('reply.unlike');
3-2. 정보의 관계성에 대한 사고재생과 복사 사이의 관계는 다음과 같습니다.
・1つのリプライに対して複数のいいねが紐づく
・1つのいいねに対して紐づくリプライは1つのみ
Replies 테이블 및 Likes 테이블의 E-R 그림사용자와 유사 간의 관계는 다음과 같습니다.
・1人のユーザーに対して複数のいいねが紐づく
・1つのいいねに対して紐づくユーザーは1人のみ
사용자 테이블 및 라이센스 테이블의 E-R 그림3-3. 모델 생성 및 수정
artisan
명령은 라이센스 모델 및 마이그레이션 파일을 생성합니다.$ php artisan make:model Like -m
3-2の情報の関係性
기반 마이그레이션 파일 및 모델 수정create_likes_teble.php
class CreateLikesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('likes', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('reply_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->timestamps();
});
...
}
}
Like.phpclass Like extends Model
{
// 配列内の要素を書き込み可能にする
protected $fillable = ['reply_id','user_id'];
public function reply()
{
return $this->belongsTo(Reply::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
Reply.phpclass Reply extends Model
{
...
public function likes()
{
return $this->hasMany(Like::class, 'reply_id');
}
}
3-4. 기능의 업무 논리적 실현기능 논리를 실현하는 데 있어서 다음과 같은 두 가지가 중점이다.
・いいねボタンを押下したら、Likeテーブルに新たにレコードが生成されて、ユーザーIDとリプライIDが保存される。
・いいねしたボタンに対して、再度いいねボタンを押すと上記で生成したレコードが削除される。
상술한 요점에 따라 설치하면 다음과 같다.RepliesController.php
class RepliesController extends Controller
{
// only()の引数内のメソッドはログイン時のみ有効
public function __construct()
{
$this->middleware(['auth', 'verified'])->only(['like', 'unlike']);
}
...
/**
* 引数のIDに紐づくリプライにLIKEする
*
* @param $id リプライID
* @return \Illuminate\Http\RedirectResponse
*/
public function like($id)
{
Like::create([
'reply_id' => $id,
'user_id' => Auth::id(),
]);
session()->flash('success', 'You Liked the Reply.');
return redirect()->back();
}
/**
* 引数のIDに紐づくリプライにUNLIKEする
*
* @param $id リプライID
* @return \Illuminate\Http\RedirectResponse
*/
public function unlike($id)
{
$like = Like::where('reply_id', $id)->where('user_id', Auth::id())->first();
$like->delete();
session()->flash('success', 'You Unliked the Reply.');
return redirect()->back();
}
...
}
4. 좋아요 설치
4-1.
いいね状態
및 非いいね状態
디스플레이 제어초기 표시에서 답장은 좋은 곳이 없습니다. 좋은 단추는 회색이고 계수는 0입니다. 좋은 상태에서 좋은 단추는 녹색으로 변하고 계수는 1을 추가합니다.
is_liked_by_auth_user()
내에서 좋은 판단이 첨부되었는지 판단하고boolean으로 판단치를 되돌려줍니다.show.blade.php
<div>
@if($reply->is_liked_by_auth_user())
<a href="{{ route('reply.unlike', ['id' => $reply->id]) }}" class="btn btn-success btn-sm">いいね<span class="badge">{{ $reply->likes->count() }}</span></a>
@else
<a href="{{ route('reply.like', ['id' => $reply->id]) }}" class="btn btn-secondary btn-sm">いいね<span class="badge">{{ $reply->likes->count() }}</span></a>
@endif
</div>
Replay.php /**
* リプライにLIKEを付いているかの判定
*
* @return bool true:Likeがついてる false:Likeがついてない
*/
public function is_liked_by_auth_user()
{
$id = Auth::id();
$likers = array();
foreach($this->likes as $like) {
array_push($likers, $like->user_id);
}
if (in_array($id, $likers)) {
return true;
} else {
return false;
}
}
4-2. 숫자 표시좋아요의 표시는
Reply
와 Like
이미 관련이 있기 때문에 count()
좋아요를 얻을 수 있다.shwo.blade.php
{{ $reply->likes->count() }}
마지막
지금까지 Laravel
いいね機能
의 설치에 대한 소개입니다!!만약 틀린 글자가 새거나 이런 더 좋은 곳이 있다면 댓글란에서 알려주세요!!
Reference
이 문제에 관하여(Laravel에서 좋은 기능을 구현해 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/phper_sugiyama/items/9a4088d1ca816a7e3f29텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)