建立一個request驗證檔案
php artisan make:request ArticlesRequest Request created successfully.
檔案內容如下:
app/Http/Requests/ArticlesRequest.php< ?phpnamespace App\Http\Requests;use App\Http\Requests\Request;class ArticlesRequest extends Request{ /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; //這個是系統管理權限的,暫時先設定為true,全部許可權可用 } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'title'=>'required', //這裡是指定驗證的項目,和驗證的規則,以數組的方式編寫 'content'=>'required' ]; }}
驗證規則參考官網: https://laravel.com/docs/5.2/validation
修改controller的store方法
app/Http/Requests/ArticlesRequest.phpuse App\Http\Requests\ArticlesRequest;// public function store(Request $requests){ public function store(ArticlesRequest $requests){ //這裡傳入的是剛才建立的ArticlesRequest的執行個體 Articles::create($requests->all()); return redirect('/articles'); }
因為現在增加了驗證,所以對store方法的進入的請求request都會進行過濾,但是直接過濾就不知道成功和失敗了,所以要額外增加一個提示
resources/views/articles/create.blade.php@extends('layout.app')@section('content') 建立文章
{!! Form::open(['url'=>'/articles/store']) !!} {!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!} {!! Form::label('content', 'Content:') !!} {!! Form::textarea('content', null, ['class' => 'form-control']) !!} {!! Form::label('publish_at', 'publish_at:') !!} {!! Form::date('publish_at', date('Y-m-d'), ['class' => 'form-control']) !!} {!! Form::submit('發表文章',['class'=>'btn btn-primary form-control']) !!} {!! Form::close() !!} @if($errors->any()) //增加這裡,$errors變數是laravel提供的,就是捕獲這些出錯而儲存的變數,是一個數組
@foreach($errors->all() as $error) //所以需要迴圈變數數組,擷取最終報錯資訊
- {{$error}}
@endforeach
@endif@stop
需要注意的是,在laravel 5.2裡面,$errors變數需要在中介軟體web裡面才會存在,如果不是的話,laravel會報錯,Undefined variable: errors。
正常情況下,觸發驗證規則的報錯彈出提示會在網頁中顯示,例如
The title field is required.The content field is required.
重寫報錯提示資訊,例如改成中文提示,需要在request檔案裡面重寫messages方法,檔案內預設沒有,所以我們需要添加
app/Http/Requests/ArticlesRequest.php public function messages() { return [ 'title.required' => '這個標題是必須的!', //例如這樣就會匹配標題required的規則,然後觸發你的提示 'body.required' => '這個身體是必須的!', ]; }