create 메소드 구현
프로젝트 생성 하는 기능을 구현하기 위해 먼저 생성 화면을 보여주는 create() 메소드를 구현해 보겠습니다.
public function create()
{
return view('project.create');
}
CODE
뷰에 전달만 하면 되므로 메소드는 매우 간단합니다.
store 메소드 구현
브라우저가 보내온 등록 데이타를 받아서 DB에 입력하는 store() 메소드를 구현할 순서입니다.
public function store(Request $request)
{
$proj = new Project([ //1
'name' => $request->get('name'),
'description' => $request->get('description'),
]);
$user = \Auth::user();
$proj->user()->associate($user->id); //2
$proj->save(); // 3
return redirect('/project')
->with('message', $proj->name . ' 이 생성되었습니다.'); //4
}
CODE
- 1 : 브라우저가 보내온 데이타를 $request->get() 메소드를 사용하여 추출한 후에 Project 모델 객체를 생성합니다.
- 2 : 프로젝트 모델은 사용자 모델에 포함되므로 현재 세션에서 사용자 id 를 얻은 후에 associate()로 연결합니다.
- 3: 모델을 DB에 저장합니다.
- 4: 프로젝트 목록 페이지로 리다이텍트하며 with() 로 처리 결과를 세션에 담아서 전달합니다.
이제 컨트롤러 구현은 끝났고 뷰 작성을 할 순서입니다.
create 뷰 구현
project.edit 뷰 파일을 생성하고 코드를 작성합니다.
@extends('layouts.app')
@section('title')
프로젝트 생성
@endsection
@section('content')
<div class="col-md-12">
<h3>프로젝트 등록</h3>
<form class="form-horizontal" role="form" method="POST" action="{{ route('project.store') }}">
{{ csrf_field() }} //1
<div class="form-group">
<label for="Project name">프로젝트 명</label>
<div>
<input type="text" class="form-control" name="name" value="{{ old('name') }}"> // 2
</div>
</div>
<div class="form-group">
<label for="설명">설명</label>
<div>
<textarea class="form-control" rows="5" name="description">{{ old('description') }}</textarea>
</div>
</div>
<div class="form-group">
<div>
<button type="submit" class="btn btn-primary">
등록
</button>
</div>
</div>
</form>
</div>
@endsection
CODE
- 1 : FORM의 액션이 POST 이므로 CSRF 를 방지하기 위해 csrf_field() 로 토큰을 생성합니다.
- 2 : 생성시에 필수 항목의 누락이나 데이타의 이상등으로 실패할 경우 다시 입력 화면으로 돌아가면 HTTP 의 특성상 이전 입력 값을 모두 잃어 버리게 되므로 이 전 값을 유지하기 위해 old() 메소드로 세션에 있는 값을 가져와서 폼을 생성합니다.
이제 뷰 작성이 완료되었고 브라우저를 열어서 생성 화면으로 들어가서 새로운 프로젝트를 만들고 정상 동작 여부를 확인해 봅시다.