Page tree

create 메소드 구현

프로젝트 생성 하는 기능을 구현하기 위해 먼저 생성 화면을 보여주는 create() 메소드를 구현해 보겠습니다.

public function create()
{
    return view('project.create');
}

뷰에 전달만 하면 되므로 메소드는 매우 간단합니다.

 

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
}
  • 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
  • 1 : FORM의 액션이 POST 이므로 CSRF 를 방지하기 위해 csrf_field() 로 토큰을 생성합니다.
  • 2 : 생성시에 필수 항목의 누락이나 데이타의 이상등으로 실패할 경우 다시 입력 화면으로 돌아가면 HTTP 의 특성상 이전 입력 값을 모두 잃어 버리게 되므로 이 전 값을 유지하기 위해 old() 메소드로 세션에 있는 값을 가져와서 폼을 생성합니다.

이제 뷰 작성이 완료되었고 브라우저를 열어서 생성 화면으로 들어가서 새로운 프로젝트를 만들고 정상 동작 여부를 확인해 봅시다.