이번에는 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 |
댓글