欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel框架表單驗(yàn)證格式化輸出的方法

 更新時(shí)間:2019年09月25日 08:34:26   作者:浪子編程走四方  
最近在公司的項(xiàng)目開發(fā)中使用到了 laravel 框架,采用的是前后端開發(fā)的模式。這篇文章主要介紹了Laravel框架表單驗(yàn)證格式化輸出,需要的朋友可以參考下

最近在公司的項(xiàng)目開發(fā)中使用到了 laravel 框架,采用的是前后端開發(fā)的模式。接觸過前后端開發(fā)模式的小伙伴應(yīng)該都知道,后端返回的數(shù)據(jù)格式需要盡可能搞得保證一致性,這樣前端在處理時(shí)也方便處理。我們先通過觀看下面的兩張接口返回的效果圖吧,這樣或許會(huì)更加的直觀一些。

laravel默認(rèn)的輸出格式(圖一)

修改后的輸出格式(圖二)

或許通過上面兩張圖,你還是未看出有什么區(qū)別的話。這里我用文字描述一下吧。 這種情況是發(fā)生在laravel做表單驗(yàn)證的情況下發(fā)生的。前端向我后端接口發(fā)送一個(gè)POST請(qǐng)求時(shí),發(fā)送了一個(gè)title和body的字段。我后端需要對(duì)兩個(gè)字段做一些非空驗(yàn)證。按照框架手冊(cè)來(lái)進(jìn)行的話,輸出的格式就是圖一的格式。然后后端統(tǒng)一的輸出格式是圖二中的格式,如果按照?qǐng)D一的格式輸出肯定是不行,這樣就需要我們做一個(gè)特殊處理。

問題排查

首先我們可以通過文檔參看到如下信息。下面劃線的部分,提到的返回信息是將所有未驗(yàn)證通過的數(shù)據(jù)都返回給前端,就如圖一中的數(shù)據(jù)格式。

laravel默認(rèn)的輸出格式(圖三)

預(yù)期效果

通過圖三我們知道了 laravel 默認(rèn)的是返回一個(gè)帶 422 的 http 狀態(tài)碼并且將所有的驗(yàn)證錯(cuò)誤信息都返回。

然而我們需要的只是如圖二的格式,單個(gè)的輸出錯(cuò)誤信息。大致的解決思路就是在輸出的時(shí)候,我們?nèi)ツJ(rèn)顯示第一個(gè)未通過的驗(yàn)證信息,當(dāng)通過之后,之前第二個(gè)未嚴(yán)重通過的就變成了第一個(gè),這樣依次循環(huán)下去,我們的每個(gè)數(shù)據(jù)就得到了驗(yàn)證。驗(yàn)證的地方我們選擇框架異常統(tǒng)一處理的地方,這樣每次驗(yàn)證都自動(dòng)的進(jìn)行處理。

解決方案

該框架是 laravel5.8 的情況下進(jìn)行編寫,如果版本不同,或許還需要特殊的處理,不過處理的思路可以參考下面的。

1.創(chuàng)建一個(gè)表單驗(yàn)證器。執(zhí)行下面的命令之后,我們?cè)?code>php app/Http/Requests目錄下面就可以看到該類文件了。

php artisan make:request ProjectValidate

2.定義驗(yàn)證規(guī)則。rules 方法是定義驗(yàn)證規(guī)則,而 messages 方法則是定義返回的錯(cuò)誤信息,該方法也可以省略掉,這樣提示的信息就是英文而不是圖一或圖二看到的中文了。

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProjectValidate 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 [
      'title' => 'bail|required',
      'body' => 'required',
    ];
  }
  /**
   * define the validation message
   *
   * @return array
   */
  public function messages()
  {
    return [
      'title.required' => '文章標(biāo)題必填',
      'body.required' => '文章內(nèi)容必填',
    ];
  }
}

3.使用驗(yàn)證器。這里我定義了一個(gè)控制器,在 addData 方法中,使用依賴注入的方式去實(shí)現(xiàn)數(shù)據(jù)的驗(yàn)證。記住,該方法體在未通過數(shù)據(jù)驗(yàn)證的情況下是不會(huì)去執(zhí)行的。

namespace App\Http\Controllers\Backend\Project;

use App\Http\Requests\ProjectValidate;
use App\Http\Controllers\Backend\UCenter;

class Index extends UCenter
{
  public function index()
  {
    return success();
  }
  public function addData(ProjectValidate $request)
  {
    $validated = $request->validated();
    return success($validated);
  }
}

4.統(tǒng)一處理數(shù)據(jù)格式。找到php App\Exceptions\Handler.php文件,找到下面的方法,修改為如下內(nèi)容。這時(shí)候在做表單驗(yàn)證就會(huì)顯示圖二的格式信息了。

public function render($request, Exception $exception)
  {
    if ($exception instanceof ValidationException) {
      // 只讀取錯(cuò)誤中的第一個(gè)錯(cuò)誤信息
      $errors = $exception->errors();
      $message = '';
      // 框架返回的是二維數(shù)組,因此需要去循環(huán)讀取第一個(gè)數(shù)據(jù)
      foreach ($errors as $key => $val) {
        $keys  = array_key_first($val);
        $message = $val[$keys];
        break;
      }
      return response()->json(['code' => 1001, 'message' => $message, 'data' => []], 422);
    }
    return parent::render($request, $exception);
  }

總結(jié)

1.優(yōu)勢(shì)

輸出固定的格式,前端在處理數(shù)據(jù)的時(shí)候,不需要做特別的格式上面調(diào)整。

2.劣勢(shì)

這樣的方式驗(yàn)證,每驗(yàn)證一次,就會(huì)向后端發(fā)送一個(gè) http 請(qǐng)求。

以上所述是小編給大家介紹的Laravel框架表單驗(yàn)證格式化輸出的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • python基于itchat模塊實(shí)現(xiàn)微信防撤回

    python基于itchat模塊實(shí)現(xiàn)微信防撤回

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信防撤回,基于itchat模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Django入門優(yōu)缺點(diǎn)及環(huán)境搭建流程

    Django入門優(yōu)缺點(diǎn)及環(huán)境搭建流程

    這篇文章主要為大家介紹了Django入門優(yōu)缺點(diǎn)及環(huán)境搭建流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python tkinter基本屬性詳解

    python tkinter基本屬性詳解

    這篇文章主要介紹了python tkinter基本屬性詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • pytorch 數(shù)據(jù)集圖片顯示方法

    pytorch 數(shù)據(jù)集圖片顯示方法

    今天小編就為大家分享一篇pytorch 數(shù)據(jù)集圖片顯示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-07-07
  • python中的lambda函數(shù)用法指南

    python中的lambda函數(shù)用法指南

    Lambda函數(shù)是Python中的匿名函數(shù),下面這篇文章主要給大家介紹了關(guān)于python中l(wèi)ambda函數(shù)用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Python中對(duì)數(shù)組集進(jìn)行按行打亂shuffle的方法

    Python中對(duì)數(shù)組集進(jìn)行按行打亂shuffle的方法

    今天小編就為大家分享一篇Python中對(duì)數(shù)組集進(jìn)行按行打亂shuffle的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • python比較兩個(gè)列表大小的方法

    python比較兩個(gè)列表大小的方法

    這篇文章主要介紹了python比較兩個(gè)列表大小的方法,涉及Python針對(duì)列表的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python Tkinter Canvas畫布控件詳解

    Python Tkinter Canvas畫布控件詳解

    Canvas 控件具有兩個(gè)功能,首先它可以用來(lái)繪制各種圖形,比如弧形、線條、橢圓形、多邊形和矩形等,其次 Canvas 控件還可以用來(lái)展示圖片。本文將具體介紹一直Tkinter中的畫布控件,需要的可以參考一下
    2022-01-01
  • python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    這篇文章主要介紹了python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成的方法,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2021-02-02
  • python opencv 直方圖反向投影的方法

    python opencv 直方圖反向投影的方法

    這篇文章主要介紹了python opencv 直方圖反向投影的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-02-02

最新評(píng)論