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.php
class 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.php
class 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. 숫자 표시
좋아요의 표시는 ReplyLike 이미 관련이 있기 때문에 count() 좋아요를 얻을 수 있다.
shwo.blade.php
{{ $reply->likes->count() }}

마지막


지금까지 Laravelいいね機能의 설치에 대한 소개입니다!!
만약 틀린 글자가 새거나 이런 더 좋은 곳이 있다면 댓글란에서 알려주세요!!

좋은 웹페이지 즐겨찾기