```為優化控制器程式碼,提高程式碼可閱讀性,故可以通過依賴注入的方式進行表單驗證
例如需要驗證的表單欄位有title body
1 建立依賴注入類 StoreQuestionRequest
php artisan make:request StoreQuestionRequest
該命令會在App\Http\Request 目錄下生成StoreQuestionRequest類
接下來找到這個類建立我們的驗證規則
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreQuestionRequest extends FormRequest
{
// 如果需要使用者登陸後才能使用,請將UserRequest類下面的authorize()裡面的return false 改為 return true;
public function authorize()
{
return true;
}
//在該方法下面建立驗證規則,具體驗證規則可參考laravel表單驗證規則
public function rules()
{
return [
'title' => 'required|min:10|max:255',
'body' => 'required|min:10'
];
}
//建立自定義錯誤提示
public function messages()
{
return [
'title.required' => '問題標題不能為空',
'title.min' => '問題標題最少10個字元',
'title.max' => '問題標題最多255個字元',
'body.required' => '問題內容不能為空',
'body.min' => '問題內容最少10個字元',
];
}
}
萬事具備只欠東風
接下來去接受表單值方法的控制器中呼叫(就是需要進行表單驗證的控制器),我的是在這個方法接受表單值,這裡使用的StoreQuestionRequest 是之前建立的依賴注入類,
use App\Http\Requests\StoreQuestionRequest;
使用之前記得引入,使用之前記得引入,使用之前記得引入,重要的事情說三遍
//沒有依賴注入之前是這樣的
//public function store(Request $request) 使用依賴注入只需要將Request改為之前建立的依賴就行了
public function store(StoreQuestionRequest $request)
{
$question = Question::create([
'title' => $request->get('title'),
'body' => $request->get('body'),
'user_id' => Auth::id(),
]);
return redirect('question/'.$question->id)->with('msg',"問題釋出成功");
}
引入過後就沒什麼事情了,就這麼簡單,表單資料驗證不通過會自動返回錯誤資訊儲存在session中
在blade模板中加入條件判斷,如果表單資料有錯誤,迴圈輸入
@if($errors->all())
@foreach ($errors->all() as $message)
<p class="bg-warning" style="padding: 15px">{{$message}}</p>
@endforeach
@endif