Laravel 5.5 validator 使用 request from

happyma發表於2018-05-17

為了簡化程式碼提高程式碼的複用性,引入 form request 去驗證

  1. 專案在剛開始驗證資料統一在控制器驗證 貼出控制器驗證程式碼

    $data = $request->all();
    //請求引數驗證
    $rules = [
    'content' => 'required|max:255'
    ];
    $messages = [
    'required' => '必填',
    'max' =>'最大長度不超過255'
    ];
    $validator = Validator::make(['content'=>$data['content']], $rules, $messages);
    //如果驗證出錯誤,提示錯誤
    if ($validator->fails()) {
    return ........
    }

            注意在控制器的頭部引入門面 validator
            use Illuminate\Support\Facades\Validator
  2. 以上在控制器驗證 已經滿足專案的需求, 但是這樣控制器的程式碼量很大 也不能提高程式碼的複用性。 所以本人研究使用form request 去做驗證步驟如下
    首先建立 form request 的程式碼 可以使用命令 可以直接用檔案. 上程式碼。 這個要注意下目錄結構
    1>
    <?php
    namespace App\Http\Requests\Api;
    use Illuminate\Foundation\Http\FormRequest;
    class Feedback extends FormRequest
    {
    /**

    • 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 [
      'content' => 'required',
      'title' => 'required',
      ];
      }
      public function messages(){
      return [
      'content.required' => '帳號不能為空',
      'title.required' => '標題不能為空',
      ];
      }
      }

    2> 控制器中使用 頭部use 引入 request 型別提示注入到需要使用的控制器的方法中。 這時在請求的時候會先去驗證 然後才可以進去方法內部。
    use App\Http\Requests\Api\Feedback as rFeedback;

class FeedbackController extends ApiController
{
//新增反饋
public function add(rFeedback $request)
{
}
}
3> 用postmen 去測試url 會返回 如下格式。這個格式是larevel 通用的。注意 頭部加X-Requested-With:XMLHttpRequest
ajax 請求會返回json。 如果是頁面請求會自動返回到上一頁 並且帶回錯誤資訊。
{
"message": "The given data was invalid.",
"errors": {
"content": [
"帳號不能為空"
],
"title": [
"標題不能為空"
]
}
}
4> 我的錯誤資訊介面 和laravel 預設的格式 不一樣。 所以我必須要重寫返回的格式。找到檔案 app\exceptions\handler.php加入如下程式碼 這樣就可以根據自己想要的去定義錯誤資訊的返回。
// protected function invalidJson($request, ValidationException $exception)
// {
// return response()->json([
// 'status'=> $exception->status,
// 'msg' => $exception->getMessage(),
// 'errors' => $exception->errors(),
// ]);
//}

5》最後改成了我自己需要返回的資訊
{
"status": 422,
"msg": "The given data was invalid.",
"errors": {
"content": [
"帳號不能為空"
],
"title": [
"標題不能為空"
]
}
}

如果錯誤資訊只需要返回第一條的第一個 使用如下程式碼: return $this->message(current($exception->errors())[0], 'error');

本人請自測試程式碼有效。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章