1. 程式人生 > >Laravel5.5 搭建簡單的社群(六)--發表帖子

Laravel5.5 搭建簡單的社群(六)--發表帖子

首先我們先登陸我們的使用者,訪問/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('/');
    }
複製程式碼