본문 바로가기
IT/PHP

PHP/Laravel(10) CRUD#3

by Sungjun_ 2020. 2. 23.

이번에는 CRUD 중에서 R을 해보겠습니다.

 

위 표를 참고하시면 작성하는데 도움이 됩니다.

 

먼저 show.blade.php에 글 수정 버튼을 만들어줍니다.

 

@extends('layouts.master')

@section('title')
    Show Board
@endsection

@section('content')
    <p style="margin-top:100px; margin-left:100px">Show Board</p>
    <div style="margin-top:10px; margin-left:100px">
    <p>제목 : {{$board->title}}</p>
    <p>내용 : {{$board->story}}</p>
    <a href="/boards/{{$board->id}}/edit"><button>수정</button></a>
    </div>
@endsection

 

그리고 web.php에 edit을 추가합니다

 

<?php

Route::get('/boards', 'BoardController@index');
Route::get('/boards/create', 'BoardController@create');
Route::post('/boards','BoardController@store');
Route::get('/boards/{board}', 'BoardController@show');
Route::get('/boards/{board}/edit', 'BoardController@edit');

 

BoardController에 edit 함수를 추가합니다.

 

public function edit(Board $board){

        return view('boards.edit',compact('board'));
    }

 

그리고 views >> boards 폴더 안에 edit.blade.php를 만들어줍니다.

 

@extends('layouts.master')

@section('title')
    Edit Boards
@endsection

@section('content')
    <div style="margin-top:100px; margin-left:100px">
    <form action="/boards/{{$board->id}}" method="POST">
        @csrf
        <label for="title">제목</label>
        <p><input type="text" name="title" id="title" value="{{$board->title}}"></p>
        <p><label for="story">본문</label><p>
        <p><textarea name="story" id="story"cols="30" rows="10">{{$board->story}}</textarea></p>
        <input type="submit" value="수정">
    </form>
    </div>
@endsection

 

이렇게 하면 수정 버튼을 누르면

 

 

이렇게 기존의 글 내용을 보여주며 수정할 수 있는 페이지가 나옵니다.

 

다음으로 수정 사항을 입력했을 때 

DB에 반영시키는 역할을 하는 update 기능을 만들겠습니다.

 

먼저 edit.blade.php에 코드 한 줄을 추가합니다.

 

@extends('layouts.master')

@section('title')
    Edit Boards
@endsection

@section('content')
    <div style="margin-top:100px; margin-left:100px">
    <form action="/boards" method="POST">
        @csrf
        @method('PUT')
        <label for="title">제목</label>
        <p><input type="text" name="title" id="title" value="{{$board->title}}"></p>
        <p><label for="story">본문</label><p>
        <p><textarea name="story" id="story"cols="30" rows="10">{{$board->story}}</textarea></p>
        <input type="submit" value="수정">
    </form>
    </div>
@endsection

 

@method('PUT')을 추가했는데 html form에서 제공하는 method는 기본적으로 POST와 GET뿐 입니다.

그래서 라라벨 기능을 이용해 method PUT을 만들어줍니다.

 

다음으로 web.php에 update 라우트를 추가합니다.

 

<?php

Route::get('/boards', 'BoardController@index');
Route::get('/boards/create', 'BoardController@create');
Route::post('/boards','BoardController@store');
Route::get('/boards/{board}', 'BoardController@show');
Route::get('/boards/{board}/edit', 'BoardController@edit');
Route::put('/boards/{board}', 'BoardController@update');

 

 

update 라우트는 put method를 사용하기 때문에 put으로 입력하셔야합나다.

 

다음으로 컨트롤러에 update 함수를 추가합니다.

 

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Board;

class BoardController extends Controller
{
    public function index(){
        $boards = Board::all();
        return view('boards.index',compact('boards'));
    }

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

    public function store(Request $request){

        /* $board = Board::create(request(['title','stroy])) >>>>
            이렇게 사용할시에는 function store() 이렇게 사용가능
            괄호 안에 Request $request 필요 없음*/
            
        $board = Board::create([
            'title'=>$request->input('title'),
            'story'=>$request->input('story')
        ]);
        return redirect('/boards/'.$board->id);
    }

    public function show(Board $board){

        return view('boards.show',compact('board'));
    }

    public function edit(Board $board){

        return view('boards.edit',compact('board'));
    }

    public function update(Board $board){

        $board->update(request(['title', 'story']));

         /*
        $board->update([
            'title'=>request('title'),
            'story'=>request('story')
        ]);
        */

        return redirect('/boards/'.$board->id);
    }

}

 

store 함수와 update 함수에 주석이 있는데 참고해주시기 바랍니다.

request() 이런 식으로 함수로 사용 가능합니다.

 

이제 글을 수정하고 확인해봅시다.

 

수정 전

 

수정 후

 

수정 후

 

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

 

 

 

CRUD중 R은 이것으로 마치고

 

다음에는 D(삭제)를 하겠습니다.

'IT > PHP' 카테고리의 다른 글

Laravel - 댓글 작성하기  (0) 2020.07.26
PHP/Laravel(11) CRUD#4  (0) 2020.02.23
PHP/Laravel(9) CRUD#2  (0) 2020.02.22
PHP/Laravel(8) CRUD#1  (0) 2020.02.22
PHP/Laravel(7) 모델  (0) 2020.02.21

댓글