Laravel5.5 搭建簡單的社群(六)--發表帖子
阿新 • • 發佈:2019-01-05
首先我們先登陸我們的使用者,訪問/discussions/create 路由,因為這條路由在resource聲明瞭 所以我們直接在PostsController中的create方法中直接實現邏輯就好:
public function create() { return view('forum.create'); }
相應的 建立create頁面:
@extends('app') @section('content') <div class="container"> <div class="row"><div class="col-md-8 col-md-offset-2" role="main"> {!! Form::open(['method'=>'post','url'=>'/discussions/']) !!} <!--- Title Field ---> <div class="form-group"> {!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!}</div> <!--- Body Field ---> <div class="form-group"> {!! Form::label('body', 'Body:') !!} {!! Form::textarea('body', null, ['class' => 'form-control']) !!} </div> <!--提交 --> {!! Form::submit('提交',['class' => 'btn btn-primary form-control']) !!} {!! Form::close() !!} <div> @if($errors->any()) <ul class="list-group"> @foreach($errors->all() as $error) <li class="list-group-item list-group-item-danger">{{ $error }}</li> @endforeach </ul> @endif </div> </div> </div> </div> @stop
我們需要一個request來指定一些規則:
class StorePostsRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'title' => 'required', 'body' => 'required|min:10', ]; } }
現在當點選提交按鈕的時候會呼叫PostsController的store方法:
public function store(Requests\StorePostsRequest $request) { // 取到資料 $user_ids = [ 'user_id' => \Auth::user()->id, 'last_user_id' => \Auth::user()->id, ]; // 存入資料庫 $discussion = Discussion::create(array_merge($request->all(), $user_ids)); // 重定向 return redirect()->action('[email protected]', $discussion->id); }
這樣就完成了釋出帖子的功能,但是我們發現釋出帖子是需要登入進來才可以的,所以我們要用middleware來保護一下文章的增刪改查方法,我們在PostsController中使用系統自帶的auth中介軟體:
public function __construct() { // 使用中介軟體 宣告只有4個方法受保護 $this->middleware('auth', ['only'=>[ 'create', 'store', 'update', 'edit', ]]); }
為了方便,我們把退出登入的方法也寫出來:
// 退出登陸 Route::get('/user/logout', '[email protected]');
public function logout() { // 退出登陸 \Auth::logout(); // 重定向回首頁 return redirect('/'); }