게시글을 삭제한 뒤 게시물을 삭제했다는 알림을 세션에 저장하여 보여주는 코드를 작성하려고 한다.
세션에 데이터를 저장하는 방법
1. put 메서드 사용
2. flash 메서드 사용
put 메서드는 데이터를 영구적으로 유지하고자 할 때 사용하고, flash 메서드는 데이터를 일시적으로 저장하고자 할 때 사용한다.
put 메서드
세션에 데이터를 저장할 때는 일반적으로 put 메서드를 사용한다.
저장한 데이터를 호출할 때는 session 메서드를 사용한다.
// Via a request instance...
$request->session()->put('key', 'value');
// Via the global "session" helper...
session(['key' => 'value']);
put 메서드는 세션에 데이터를 영구적으로 저장한다.
즉, 세션이 종료될 때까지 데이터가 유지된다.
주로 사용자의 로그인 상태를 세션에 저장할 때 사용된다.
flash 메서드
세션에 데이터를 임시저장할 때에는 flash 메서드를 사용한다.
flash 메서드를 사용하여 세션에 저장된 데이터는 저장 즉시 혹은 다음 HTTP 요청에서만 사용할 수 있다.
요청이 완료되면 데이터는 삭제된다.
플래시 데이터는 단기 상태 메시지에 유용하다.
$request->session()->flash('status', 'Task was successful!');
여러 요청에 대해 플래시 데이터를 유지해야 하는 경우에는 reflash 메서드를 사용한다.
reflash 메서드는 추가 요청에 대한 모든 플래시 데이터를 보관한다.
$request->session()->reflash();
특정 플래시 데이터만 보관할 때에는 keep 메서드를 사용한다.
$request->session()->keep(['username', 'email']);
현재 요청에 대해서만 플래시 데이터를 유지하려면 now 메서드를 사용한다.
$request->session()->now('status', 'Task was successful!');
작성한 코드는 다음과 같다.
public function delete(Board $board){
$user = auth()->user();
if ($user->can('delete', $board)) {
$board->delete();
session()->flash('success', '게시물이 성공적으로 삭제되었습니다.');
// session()->put('success', '게시물이 성공적으로 삭제되었습니다.');
return redirect()->route('boards.index', $board);
} else {
abort(403, '게시물을 삭제할 권한이 없습니다.');
}
}