반응형
글쓰기 페이지를 수정해서 글쓰기 버튼 클릭시 작성한 글을 저장하도록 수정한다.
/resources/views/boards/write.blade.php
@extends('boards.layout')
@section('header')
<div class="d-flex flex-column flex-md-row align-items-center pb-3 mb-4 border-bottom">
<span class="fs-4">게시판 글쓰기</span>
<nav class="d-inline-flex mt-2 mt-md-0 ms-md-auto">
@guest()
<a href="{{route('auth.login')}}" class="text-xl">로그인</a> /
<a href="{{route('auth.signup')}}" class="text-xl">회원가입</a>
@endguest
@auth()
<form action="/logout" method="post" class="inline-block">
@csrf
<span class="text-xl text-blue-500">{{auth()->user()->userid}}</span> /
<a href="/logout"><button class="text-xl">로그아웃</button></a>
</form>
@endauth
</nav>
</div>
@endsection
@section('content')
<br />
<form method="post" action="/boards/create" enctype="multipart/form-data">
@csrf
@method('post')
<input type="hidden" name="attcnt" id="attcnt" value="0">
<input type="hidden" name="imgUrl" id="imgUrl" value="">
<input type="hidden" name="attachFile" id="attachFile" value="">
<div class="form-group">
<div class="col-md-12">
<input type="text" name="subject" id="subject" class="form-control input-lg" placeholder="제목을 입력하세요." />
</div>
<br />
</div>
<div class="form-group">
<div class="col-md-12">
<textarea class="form-control" id="content" name="content" rows="5" placeholder="내용을 입력하세요."></textarea>
</div>
</div>
<br />
<br />
<div class="form-group">
<div class="col-md-12 text-center">
<button type="button" name="edit" class="btn btn-primary input-lg" onclick="sendsubmit()">등록</button>
</div>
</div>
</form>
<script>
function sendsubmit(){
var subject=$("#subject").val();
var content=$("#content").val();
var data = {
subject : subject,
content : content
};
$.ajax({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
type: 'post',
url: '{{ route('boards.create') }}',
dataType: 'json',
data: data,
success: function(data) {
location.href='/boards/show/'+data.bid+'/1';
},
error: function(data) {
console.log("error" +data);
}
});
}
</script>
@endsection
라우터를 수정한다.
/routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BoardController;
use App\Http\Controllers\MemberController;
Route::get('/', function () {
return view('welcome');
});
//게시판
Route::get('/boards', [BoardController::class, 'index'])->name('boards.index');
Route::get('/boards/show/{id}/{page}', [BoardController::class, 'show'])->name('boards.show');
Route::middleware('auth') -> group(function (){
Route::get('/boards/write', [BoardController::class, 'write'])->name('boards.write');
Route::post('/boards/create', [BoardController::class, 'create'])->name('boards.create');
});
//회원
Route::get('/login', [MemberController::class, 'login'])->name('auth.login');
Route::get('/signup', [MemberController::class, 'signup'])->name('auth.signup');
Route::post('/signupok', [MemberController::class, 'signupok'])->name('auth.signupok');
Route::post('/emailcheck', [MemberController::class, 'emailcheck'])->name('auth.emailcheck');
Route::post('/loginok', [MemberController::class, 'loginok']) -> name('auth.loginok');
Route::post('/logout', [MemberController::class, 'logout']) -> name('auth.logout');
콘트롤러를 만든다.
/app/Http/Controllers/BoardController.php
<?php
namespace App\Http\Controllers;
use App\Models\Board;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class BoardController extends Controller
{
public function index(){
$boards = Board::orderBy('bid','desc')->paginate(20);
return view('boards.index', compact('boards'));
}
public function show($bid,$page)
{
Board::find($bid)->increment('cnt');
$boards = Board::findOrFail($bid);
$boards->content = htmlspecialchars_decode($boards->content);
$boards->pagenumber = $page??1;
return view('boards.view', ['boards' => $boards]);
}
public function write()
{
if(auth()->check()){
return view('boards.write');
}else{
return redirect()->back()->withErrors('로그인 하십시오.');
}
}
public function create(Request $request)
{
$form_data = array(
'subject' => $request->subject,
'content' => $request->content,
'userid' => Auth::user()->userid,
'email' => Auth::user()->email,
'multi' => $request->multi??'free',
'status' => 1
);
if(auth()->check()){
$rs=Board::create($form_data);
return response()->json(array('msg'=> "succ", 'bid'=>$rs->bid), 200);
}
}
}
$form_data에 들어 있는 변수들은 Board모델의 fillable에 등록돼 있어야 한다.
/app/Models/Board.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Board extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'board';
/**
* The primary key for the model.
*
* @var string
*/
protected $primaryKey = 'bid';
/**
* Attributes that should be mass-assignable.
*
* @var array
*/
protected $fillable = [
'content', 'multi', 'subject', 'userid', 'cnt', 'status'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'bid' => 'int', 'bid' => 'int', 'content' => 'string', 'modifydate' => 'datetime', 'multi' => 'string', 'parent_id' => 'int', 'regdate' => 'datetime', 'status' => 'int', 'subject' => 'string', 'userid' => 'string', 'content' => 'string', 'modifydate' => 'datetime', 'multi' => 'string', 'parent_id' => 'int', 'regdate' => 'datetime', 'status' => 'boolean', 'subject' => 'string', 'userid' => 'string'
];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'modifydate', 'regdate', 'modifydate', 'regdate'
];
/**
* Indicates if the model should be timestamped.
*
* @var boolean
*/
public $timestamps = false;
// Scopes...
// Functions ...
// Relations ...
}
이제 글을 써보자. 글이 등록되면 view로 넘어간다.
/resources/views/boards/view.blade.php
@extends('boards.layout')
@section('header')
<div class="d-flex flex-column flex-md-row align-items-center pb-3 mb-4 border-bottom">
<span class="fs-4">게시판 보기</span>
<nav class="d-inline-flex mt-2 mt-md-0 ms-md-auto">
@guest()
<a href="{{route('auth.login')}}" class="text-xl">로그인</a> /
<a href="{{route('auth.signup')}}" class="text-xl">회원가입</a>
@endguest
@auth()
<form action="/logout" method="post" class="inline-block">
@csrf
<span class="text-xl text-blue-500">{{auth()->user()->userid}}</span> /
<a href="/logout"><button class="text-xl">로그아웃</button></a>
</form>
@endauth
</nav>
</div>
@endsection
@section('content')
<table class="table table-striped table-hover">
<tbody>
<tr>
<th width="100">제목</th>
<td>{{ $boards->subject }}</td>
</tr>
<tr>
<td colspan="2">글쓴이 : {{ $boards->userid }} / 조회수 : {{ number_format($boards->cnt) }} / 등록일 : {{ $boards->regdate }}</td>
</tr>
<tr>
<th width="100">내용</th>
<td>{!! nl2br($boards->content) !!}</td>
</tr>
</tbody>
</table>
<div align="right">
<a href="/boards/?page={{ $boards->pagenumber }}" class="btn btn-primary">목록</a>
</div>
@endsection
글을 작성 후
이렇게 나오면 성공이다.
반응형
'PHP강좌 > [라라벨]게시판만들기강좌' 카테고리의 다른 글
[라라벨+mysql]게시판 만들기 강좌 #10. Validator (2) | 2024.07.22 |
---|---|
[라라벨+mysql]게시판 만들기 강좌 #9. include 하기 (0) | 2024.07.19 |
[라라벨+mysql]게시판 만들기 강좌 #7. 글 쓰기 페이지 1/2 (0) | 2024.07.19 |
[라라벨+mysql]게시판 만들기 강좌 #6. 로그인/로그아웃 만들기 (0) | 2024.07.17 |
[라라벨+mysql]게시판 만들기 강좌 #5. 회원 가입 페이지 만들기 2/2 (0) | 2024.07.17 |