destroy 메소드 구현
마지막으로 프로젝트 삭제 기능을 구현해 보겠습니다. 삭제는 위험한 기능이므로 별도의 추가 확인 절차를 거쳐야 하지만 본 예제에서는 생략하도록 하겠습니다. 실제 데이타를 삭제하는 메소드는 destroy() 이므로 다음 코드를 추가합니다.
public function destroy($id)
{
$proj = Project::findOrFail($id);
foreach($proj->tasks()->get() as $task) { //1
$task->delete();
}
$proj->delete(); // 2
return redirect('/project')
->with('message', '프로젝트 ' . $proj->name . ' 이 삭제되었습니다.');
}
CODE
뷰 구현
삭제는 별도의 뷰를 만들지 않고 project.index 에 삭제 버튼을 만들어 두었으므로 이를 수정해서 사용하겠습니다.
<a class="btn btn-danger" href="{{ route('project.destroy', $proj->id) }}">삭제</a>
CODE
위 코드를 다음과 같이 수정합니다.
<form method="POST" action="{{ route('project.destroy', $proj->id) }}"> // 1
{{ csrf_field() }}
{{ method_field('DELETE') }} //2
<button type="submit" class="btn btn-danger">
삭제
</button>
</form>
CODE
- 1 : 삭제를 수행하는 project.destroy 라우팅에 연결합니다.
- 2: HTTP 의 DELETE 메소드를 사용해야 하므로 method_field() 의 파라미터로 DELETE 를 사용합니다.
이제 기능 구현이 끝났습니다. 브라우저에서 "삭제" 버튼을 클릭하여 정상적으로 동작하는 지 확인해 봅시다.