Page tree

show 메소드 구현

사용자가 인덱스 페이지에서 이름 컬럼을 클릭하면 브라우저는  /project/{id} 에 요청을 보내고 서버는 이에 맞는 프로젝트의 상세 정보를 화면에 표시하는 것이 사용자가 기대한 동작입니다.

 artisan route:list 로 확인해 보면 이를 처리하는 메소드는 show() 이므로 기능을 구현해 보겠습니다.

public function show($id)
{
    $proj = Project::find($id);	//1
    if($proj == null) {				
        abort(404, $id . ' 모델을 찾을 수가 없습니다.');	// 2
    }

    return view('project.show')->with('proj', $proj);	//3
}
  • 1: 파라미터로 넘어온 id 로 프로젝트를 검색합니다.
  • 2: 검색 결과가 없을 경우 404 에러를 내고 실행을 중단합니다. 이 코드대신 Project::findOrFail($id); 를 사용해도 되지만 라라벨 프레임워크에서 설정한 에러 메시지가 출력되므로 대신 abort()를 사용했습니다.

  • 3: 프로젝트 정보를 보여주는 뷰 파일에 검색한 모델을 전달합니다. 

 

뷰 구현

뷰의 이름이 project.show 이므로 뷰 파일의 경로는 resources/views/project/show.blade.php 을 작성합니다.

@extends('layouts.app')

@section('title')
    프로젝트 정보
@endsection

@section('content')

    <div class="col-md-8">

        <h3>프로젝트 정보</h3>

            <div class="form-group">
                <label for="Project name">프로젝트 명</label>
                <div>
                    <input type="text" class="form-control" name="name" value="{{ $proj->name }}" readonly="true">
                </div>
            </div>

            <div class="form-group">
                <label for="설명">설명</label>
                <div>
                    <textarea class="form-control" rows="3" name="description" readonly="true">{{ $proj->description }}</textarea>
                </div>
            </div>

            <div class="form-group">
                <label for="생성일">생성일</label>
                <div>
                    <input type="text" class="form-control" name="created_at" value="{{ $proj->created_at }}" readonly="true">
                </div>
            </div>
			<div class="form-group">
    			<label for="수정일">수정일</label>
    			<div>
        				<input type="text" class="form-control" name="updated_at" value="{{ $proj->updated_at }}" readonly="true">
    			</div>
			</div>
        <p>
            <a href="{{ route('project.task.index', $proj->id) }}" class="btn btn-info">Task 목록 보기</a>
        </p>


    </div>
@endsection

show 뷰는 특별한 내용은 없으며 하단에는 프로젝트에 속하는 태스트를 볼 수 있는 project.task.index 라우팅을 연결합니다.