방법은 유저 ID를 클릭해서 블라인드 추가를 누르면 된다.
<a href="{{ route('blind', $forum->user->id ) }}">블라인드 추가</a>
블라인드 추가를 했을때, GET방식을 이용해서 해당 유저의 ID값을 전송한다.
Route::get('/blind/{id}', [BlindController::class, 'add_blind'])->name('blind');
그러면 설정해준 Route에 의해서 BlindController 클래스의 add_blind 함수를 동작시킨다.
public function add_blind($id)
{
$blind_user = Blind_user::where('user_id', auth()->id())->where('target_id', $id)->first();
if($blind_user==null){
$values['user_id'] = auth()->id();
$values['target_id'] = $id;
Blind_user::create($values);
emotify('success', '블라인드!');
} else {
emotify('error', '이미 블라인드 상태입니다!');
}
return redirect()->back();
}
add_blind함수에서는 전송받은 ID값을 이용해서, 일단 DB에 현재 이미 블라인드 되어진 유저가 아닌지를 체크한다.
아니면, 현재 로그인중인 유저의 ID값과 블라인드 대상이 되는 유저의 ID값을 DB에 저장한다.
.
그리고, 메세지를 통해서 성공하면 "블라인드!" 라는 문구, 실패하면 "이미 블라인드 상태입니다!"라는 문구를 보여준다.
그리고, 마이페이지에서 블라인드 목록을 볼 수 있도록 구현했다.
public function blind_list()
{
$blind_list = Blind_user::where('user_id', auth()->id())->paginate(2);
return view('mypage.blind_list', [
'blind_list' => $blind_list
]);
}
간단하게 현재 로그인한 유저의 ID를 query문의 where조건으로 가져온것이다.
그것을 paginate -> 페이징 기능을 이용해서 2개 단위로 끊어서 화면에 보이도록 했다.
블라인드 당한 유저가, 글을 볼려고 하면 어떻게되나????
403 HTTP 예외처리를 통해 해당 페이지를 접근할 수 없고 블라인드 당했다는 에러메세지도 함께 출력된다.
public function is_blind(Forum $forum)
{
$is_blind = Blind_user::where('user_id', $forum->user->id)->where('target_id', auth()->id())->first();
return $is_blind == null;
}
is_blind라는 함수를 추가해서, 현재 로그인된 유저가 볼려고 하는 게시글의 주인한테 블라인드 당했는지 안당했는지를 where조건으로 뽑아 낸 뒤
public function show(Forum $forum)
{
abort_unless(auth()->user()->is_blind($forum), 403, '당신은 글쓴이에게 블라인드 당했습니다.');
return view('forum.show', [
'forum' => $forum
]);
}
abort_unless함수를 통해서 false 일 경우 403 에러와 메세지가 나오도록 하는 것
is_blind함수는 해당 유저가 블라인드 당한 상태가 아니면 true, 블라인드 당한 상태면 false를 반환하기 때문에,
블라인드 당한 유저는 false이므로 abort_unless함수에 의해서 예외처리가 일어나느 것이다.
이상입니다.
'IT 공부 > Laravel' 카테고리의 다른 글
[Laravel + Vue.js] 나만의 To Do List 만들기 (0) | 2021.08.29 |
---|---|
[ Laravel ] 프로젝트 Jetstream 사용하기 (0) | 2021.08.08 |
[ Laravel ] 웹사이트 개발 (친구 요청 및 친구 추가 기능) (0) | 2021.04.14 |
[ Laravel ] Vue.js로 실시간 채팅(메세지 저장/불러오기) (0) | 2021.04.01 |
[ Laravel ] Vue.js를 이용한 실시간 채팅 (유저목록) (0) | 2021.03.31 |