태스크 생성 기능 구현
먼저 생성 화면을 보여주는 create() 메소드를 구현해 보겠습니다.
public function create($projId)
{
$proj = Project::findOrFail($projId);
return view('project.task.create')
->with('proj', $proj);
}
CODE
이제 resources/views/project/task/create.blade.php 파일에 다음 내용을 작성합니다.
resources/views/project/task/create.blade.php
@extends('layouts.app')
@section('title')
태스크 생성
@endsection
@section('content')
<div class="col-md-12">
<form class="form-horizontal" role="form" method="POST" action="{{ route('project.task.store', [$proj->id]) }}"> // 1
{{ csrf_field() }}
<div class="form-group">
<label for="project.task.name">태스크 명</label>
<div>
<input type="text" class="form-control" name="name" value="{{ old('name') }}">
</div>
</div>
<div class="form-group">
<label for="설명">설명</label>
<div>
<textarea class="form-control" rows="3" name="description">{{ old('description') }}</textarea>
</div>
</div>
<div class="form-group">
<label>우선순위</label>
<div>
<select class="form-control" name="priority"> //2
@foreach(['낮음' ,'보통', '높음'] as $p)
<option value="{{$p}}" {{ (old('priority') === $p) ? "selected" : "" }}>{{$p}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group">
<label>상태</label>
<div>
<select class="form-control" name="status"> //3
@foreach(['등록', '진행', '완료'] as $s)
<option value="{{$s}}" {{ (old('status') === $s) ? "selected" : "" }}>{{$s}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group">
<label for="기한">기한</label>
<div class='input-group date' id='due_date'>
<input type='text' class="form-control" value=""/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<script type="text/javascript">
$(function () {
$('#due_date').datetimepicker({ //4
locale: 'en',
defaultDate: '{{ \Carbon\Carbon::now() }}',
format: 'YYYY-MM-DD HH:mm:ss'
});
});
</script>
</div>
<div class="form-group">
<div>
<button type="submit" class="btn btn-primary">
생성
</button>
</div>
</div>
</form>
</div>
@endsection
PHP
- 1 : 폼을 처리할 URL 을 project.task.store 라우팅으로 지정합니다.
- 2 : 태스크의 우선 순위를 지정하는 select 박스를 생성하며 예전 폼 데이타가 있는지 old('priority') 로 확인 후에 있을 경우 "selected" 속성을 부여합니다.
- 3 : 태스크의 상태를 지정하는 select 박스를 생성하며 2번 처럼 예전 폼 데이타를 확인합니다.
- 4 : 달력 콘트롤의 시간을 현재로 맞추고 날자 포맷을 설정합니다.
이제 POST 로 전달한 태스크 등록 데이타를 처리할 store() 메소드를 구현합니다.
public function store(Request $request, $projId)
{
$task = new Task([ //1
'name' => $request->get('name'),
'description' => $request->get('description'),
'priority' => $request->get('priority'),
'status' => $request->get('status'),
'due_date' => $request->get('due_date'),
]);
$task->project()->associate($projId);; //2
$task->save(); //3
return redirect(route('project.task.index', $task->project->id))
->with('message', $task->name . ' 가 생성 되었습니다.');
}
CODE
- 1: 폼으로 전달된 내용을 기반으로 Task 객체를 생성합니다.
- 2: 태스크를 현재 프로젝트와 연결 합니다.
- 3: 태스크를 DB 에 저장합니다.
구현이 완료되었고 브라우저로 연결하여 정상적으로 태스크가 등록되는지 여부를 확인해 봅시다.
태스크 삭제 기능은 더 간단하므로 프로젝트 컨트롤러의 destroy() 메소드를 참고하여 독자들이 직접 구현해 보기 바랍니다.