Laravel 依賴注入方式驗證表單欄位

gangan發表於2019-05-23


```為優化控制器程式碼,提高程式碼可閱讀性,故可以通過依賴注入的方式進行表單驗證
例如需要驗證的表單欄位有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

相關文章