久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel學習教程之request validation的編寫

這篇文章主要給大家介紹了關于Laravel學習教程之request validation編寫的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面

前言

本文主要給大家介紹了關于Laravel之request validation編寫的相關內容,在用laravel寫api時,當前端傳進來的request是POST/PUT/PATH等method時,那需要做request validation,盡管對于前后端分離程序,前端程序Angular/Vue已經(jīng)做了validation,但是ajax傳過來的json input,在后端也需要做validation。

那該如何優(yōu)雅的編寫request validation呢?laravel官方文檔已經(jīng)包含了這個feature: Form Request Validation

實現(xiàn)方法如下

這里可以寫一個JsonRequest:

class JsonRequest extends Illuminate\Foundation\Http\FormRequest
{
 public function rules()
 {
  $method = $this->method();
  
  assert(in_array($method, [static::METHOD_POST, static::METHOD_PUT, static::METHOD_PATCH], true));
  
  $controller = $this->route()->getController();
  $rules  = $controller::RULES;

  return ($rules[$this->method()] ?? []) + ($rules['*'] ?? []);
 }

 public function authorize()
 {
  return true;
 }
}

這樣就可以在眾多Model Controller里使用JsonRequest就行,如:

use Illuminate\Http\Request;

final class AccountController extends \App\Http\Controllers\Controller
{
 public const RULES = [
  Request::METHOD_POST => [
   'bank_account' => 'required_if:type,bank',
   'loan_account' => 'required_if:type,loan',
  ],
  Request::METHOD_PUT => [
   // ...
  ],
  '*' => [
   // ...
  ],
 ];
}

這樣就可以校驗前端傳進來的json input是否合法。

(1)如果前端傳進來的json input是:

{
 "name": "lx1036",
 "type": "loan",
 "bank_account": {
  "source": "bank",
 }
}

那就validation失敗,不合法。

(2) 如果前端傳進來的json input是:

{
 "name": "lx1036",
 "type": "bank",
 "loan_account": {
  "source": "loan",
 }
}

那就validation失敗,不合法。

這樣就可以校驗json input,不合法就直接彈回throw 一個HttpException,不再用在進入下一步邏輯。對于這樣嵌套的json input,使用request validation來校驗對象間關系很重要,可以看做是進入核心業(yè)務邏輯前的初步校驗。。當然最后寫表時還有model validation,避免壞數(shù)據(jù)進入db。

最后一點,laravel文檔只是說了用法,沒有說明原理。代碼在\Illuminate\Foundation\Providers\FormRequestServiceProvider::class:

 public function boot()
 {
  // \Illuminate\Foundation\Http\FormRequest use 了 ValidatesWhenResolvedTrait,extends 了 \Illuminate\Contracts\Validation\ValidatesWhenResolved
  $this->app->afterResolving(ValidatesWhenResolved::class, function ($resolved) {
   $resolved->validate();
  });

  // ...
 }

所以當從容器中resolve完\Illuminate\Foundation\Http\FormRequest后就會立即執(zhí)行\(zhòng)Illuminate\Foundation\Http\FormRequest::validate()方法,具體不詳述,可看laravel源碼。

OK,總之,在寫程序時,validation很重要,需要去寫,包括request validation和model validation。。。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對的支持。

【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學習交流,請勿用于商業(yè)用途。如損害你的權益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規(guī)則的優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現(xiàn)了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現(xiàn)前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統(tǒng)一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執(zhí)行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 国产一区二区日韩 | 91福利网站| 精品久久久久久久久久久 | 精品国产99久久久久久宅男i | 日韩视频在线免费观看 | 国产亚洲视频在线观看 | 日日干日日 | 99色综合 | 酒色成人网| 国产主播av | 一区二区三区免费观看 | 黑人精品xxx一区一二区 | 538精品视频 | 久久新视频 | 激情六月 | 久久五月婷 | www.婷婷.com | 色爽视频 | 天天草天天射 | 五月天激情综合 | 国产二三区 | 午夜88| 国产一区在线观看视频 | 国产欧美一区二区三区视频在线观看 | 国产成人精品一区二 | 在线观看黄色片 | 高h乱l高辣h文短篇h | 日本免费在线观看 | 色吧五月天| 四川一级毛毛片 | 成人免费视屏 | 成人欧美日韩 | 国产成人精品免费视频 | 久久免费毛片 | 国产性猛交 | 麻豆av网站 | 五月婷婷综合网 | 日韩a在线观看 | 欧美精品一区二区在线观看 | 欧美日韩综合网 | 国产1区2区|