IT/PHP

Laravel 8 - CRUD(4)

Sungjun_ 2021. 1. 5. 15:38

CRUD 중 Update입니다.

 

BoardController.php 파일에 edit 메서드를 추가해줍니다.

public function edit($id){
        $board = Board::where('id', $id) -> first();
        return view('boards.edit', compact('board'));
    }

 

web.php에 라우트를 추가해줍니다.

Route::get('boards/{board}/edit', [BoardController::class, 'edit']) -> name('boards.edit');

 

show.blade.php 파일을 열어 수정 및 삭제 버튼을 만들어줍니다.

@extends('layouts.app')

@section('section')
    <section class="w-2/3 mx-auto mt-16">
        <div class="border-b border-gray-300 mb-8 pl-1 pb-2 text-xl font-bold">
            {{$board -> title}}
        </div>
        <div class="text-lg">
            {{$board -> story}}
        </div>
        <div class="mt-8">
            <a href="{{route('boards.edit', $board -> id)}}">
                <button class="px-4 py-1 text-white text-lg bg-blue-500 hover:bg-blue-700">수정</button>
            </a>
            <button class="px-4 py-1 text-white text-lg bg-red-500 hover:bg-red-700">삭제</button>
        </div>
    </section>
@stop

 

edit.blade.php 파일을 만들어줍시다.

@extends('layouts.app')

@section('section')
    <section class="w-2/3 mx-auto mt-16">
        <form action="/boards/{{$board -> id}}" method="post">
            @method('PUT')
            @csrf
            <p>
                <label for="title" class="text-xl">제목 : </label>
                <input type="text" id="title" name="title" value="{{$board -> title}}"
                       class="outline-none border border-blue-400 w-1/2 pl-1 py-1 rounded-lg">
            </p>
            <p class="mt-4">
                <label for="story" class="text-xl">내용</label>
                <textarea id="story" name="story"
                          class="outline-none border border-blue-400 w-full h-64 mt-2 rounded-lg resize-none">{{$board -> story}}</textarea>
            </p>
            <p class="mt-8">
                <input type="submit" value="수정"
                       class="px-4 py-1 bg-green-500 hover:bg-green-700 text-lg text-white">
                <input type="button" value="취소" onclick="history.back()"
                       class="px-4 py-1 ml-6 bg-red-500 hover:bg-red-700 text-lg text-white">
            </p>
        </form>
    </section>
@stop

 

BoardController.php에 update 메소드를 추가합니다.

public function update(Request $request, $id){
        $validation = $request -> validate([
            'title' => 'required',
            'story' => 'required'
        ]);

        $board = Board::where('id', $id) -> first();
        $board -> title = $validation['title'];
        $board -> story = $validation['story'];
        $board -> save();

        return redirect() -> route('boards.show', $id);
    }

 

update 메소드가 실행되면 원래 글로 돌아가게 했습니다.

web.php에 update 메서드를 추가합니다.

Route::put('boards/{board}', [BoardController::class, 'update']) -> name('boards.update');

 

이제 수정 버튼을 눌러서 글을 수정해봅시다.

 

update

 

 

수정 후

 

제대로 수정된 것을 확인할 수 있습니다.