最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Laravel學(xué)習(xí)教程之model validation的使用示例

 更新時間:2017年10月23日 09:07:23   作者:lx1036  
這篇文章主要給大家介紹了關(guān)于Laravel學(xué)習(xí)教程之model validation使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

本文主要給大家介紹了關(guān)于Laravel學(xué)習(xí)之model validation使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。

在對database進行寫操作前,需要對數(shù)據(jù)進行validation,如type-check 每一個 model column 的定義('type' 這個column必須是enum('card','loan')) ,這里使用model event來做。

在EventServiceProvider(或自定義一個ValidationServiceProvider)中寫上:

public function boot()
{
  /**
   * Inspired by @see \Illuminate\Foundation\Providers\FormRequestServiceProvider::boot()
   *
   * Note: saving event is always triggered before creating and updating events
   */
  $this->app['events']->listen('eloquent.saving: *', function (string $event_name, array $data): void {
   /** @var \App\Extensions\Illuminate\Database\Eloquent\Model $object */
   $object = $data[0];
   
   $object->validate();
  });
}

'eloquent.saving: *'是表示listen所有model的saving,即任何一個model的寫操作都會觸發(fā)該事件。

然后寫一個abstract model extends EloquentModel:

// \App\Extensions\Illuminate\Database\Eloquent\Model

use Illuminate\Database\Eloquent\Model as EloquentModel;
use Illuminate\Validation\ValidationException;

abstract class Model extends EloquentModel
{
 public function validate():void
 {
  // 1. validate type rules (type-check)
  $validator = $this->getTypeValidator();
  
  if ($validator->fails()) {
   throw new ValidationException($validator);
  }
  
  // $validator = $this->getConstraintValidator();
  // 2. validate constraint rules (sanity-check)
 }

 protected function getTypeValidator()
 {
  return $this->getValidationFactory()->make($this->attributes, static::COLUMN_TYPE_RULES);
 }
 
 protected function getValidationFactory()
 {
  return app(Factory::class);
 }
 
 protected function getConstraintValidator()
 {
  // return $this->getValidationFactory()->make($attributes, static::COLUMN_CONSTRAINT_RULES);
 } 
}

這樣,在每一個繼承abstract model的子類中,定義const COLUMN_TYPE_RULES就行,如:

class Account extends Model
{
 public const COLUMN_TYPE_RULES = [
  'id' => 'integer|between:0,4294967295',
  'source' => 'nullable|in:schwab,orion,yodlee',
  'type' => 'required|in:bank,card,loan',
 ];
}

在寫操作時,提前對每一個 model 的 schema definition進行type-check,避免無效碰撞 database。這個feature的目的是從model schema去校驗輸入數(shù)據(jù)的字段定義是否合法。

另外一般除了type-check schema definition 外,還得根據(jù)業(yè)務(wù)需要進行邏輯校驗sanity-check constraint rules,如當(dāng)創(chuàng)建一個account時,輸入inputs里的字段person_id不能是child未成年人,等等。這里業(yè)務(wù)不同,constraint rules不同,不做過多解釋。這個feature的目的主要是從邏輯上校驗輸入數(shù)據(jù)的合法性。

OK,總之一般情況下,在寫數(shù)據(jù)庫前都需要做 model validation,避免無效hit db。

總結(jié)

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

相關(guān)文章

  • thinkphp跨庫操作的簡單代碼實例

    thinkphp跨庫操作的簡單代碼實例

    下面小編就為大家?guī)硪黄猼hinkphp跨庫操作的簡單代碼實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 分享下頁面關(guān)鍵字抓取www.icbase.com站點代碼(帶asp.net參數(shù)的)

    分享下頁面關(guān)鍵字抓取www.icbase.com站點代碼(帶asp.net參數(shù)的)

    這篇文章主要介紹了分享下頁面關(guān)鍵字抓取www.icbase.com站點代碼(帶asp.net參數(shù)的)的相關(guān)資料,需要的朋友可以參考下
    2014-01-01
  • typecho插件編寫教程(五):核心代碼

    typecho插件編寫教程(五):核心代碼

    這篇文章主要介紹了typecho插件編寫教程(五):核心代碼,本文講解了完整的插件核心代碼的示例,需要的朋友可以參考下
    2015-05-05
  • PHP PDO預(yù)處理語句及事務(wù)的使用

    PHP PDO預(yù)處理語句及事務(wù)的使用

    今天這篇文章,我們來簡單的學(xué)習(xí)一下 PDO 中的預(yù)處理語句以及事務(wù)的使用,它們都是在 PDO 對象下的操作,而且并不復(fù)雜,簡單的應(yīng)用都能很容易地實現(xiàn)。只不過大部分情況下,大家都在使用框架,手寫的機會非常少。
    2021-06-06
  • PHP開源開發(fā)框架ZendFramework使用中常見問題說明及解決方案

    PHP開源開發(fā)框架ZendFramework使用中常見問題說明及解決方案

    Zend Framework(簡寫ZF)是由 Zend 公司支持開發(fā)的完全基于 PHP5 的開源PHP開發(fā)框架,可用于開發(fā) Web 程序和服務(wù),ZF采用 MVC(Model–View-Controller) 架構(gòu)模式來分離應(yīng)用程序中不同的部分方便程序的開發(fā)和維護。
    2014-06-06
  • Laravel最佳分割路由文件(routes.php)的方式

    Laravel最佳分割路由文件(routes.php)的方式

    本文是一篇關(guān)于Laravel分割路由文件(routes.php)的最佳方式教程文章,內(nèi)容介紹的很詳細,學(xué)習(xí)Laravel的小伙伴可以參考學(xué)習(xí)。
    2016-08-08
  • laravel下trait的使用代碼實例詳解

    laravel下trait的使用代碼實例詳解

    這篇文章主要介紹了laravel下trait的使用代碼實例詳解,使用trait可以提高代碼的復(fù)用性,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • 一個PHP實現(xiàn)的輕量級簡單爬蟲

    一個PHP實現(xiàn)的輕量級簡單爬蟲

    這篇文章主要介紹了一個PHP實現(xiàn)的輕量級簡單爬蟲,本文總結(jié)了爬蟲的一些知識如爬蟲的結(jié)構(gòu)、正則表達式、其他問題等,然后給出了爬蟲實現(xiàn)代碼,需要的朋友可以參考下
    2015-07-07
  • PHP date()函數(shù)警告: It is not safe to rely on the system解決方法

    PHP date()函數(shù)警告: It is not safe to rely on the system解決方法

    這篇文章主要介紹了PHP date()函數(shù)警告: It is not safe to rely on the system解決方法,其實就是時區(qū)設(shè)置不正確造成的,本文提供了兩種方法來解決這個問題,需要的朋友可以參考下
    2014-08-08
  • Yii2框架控制器、路由、Url生成操作示例

    Yii2框架控制器、路由、Url生成操作示例

    這篇文章主要介紹了Yii2框架控制器、路由、Url生成操作,結(jié)合實例形式分析了Yii2框架控制器、路由、url生成跳轉(zhuǎn)等相關(guān)原理及操作技巧,需要的朋友可以參考下
    2019-05-05

最新評論

潼南县| 古田县| 鹿泉市| 内黄县| 唐海县| 灌云县| 柳河县| 临沂市| 曲沃县| 上饶县| 青州市| 北流市| 桂平市| 惠来县| 宜春市| 剑川县| 偏关县| 介休市| 亚东县| 武平县| 寿阳县| 定结县| 大埔区| 黄平县| 河南省| 茂名市| 轮台县| 南雄市| 西昌市| 上高县| 昌吉市| 麦盖提县| 道真| 平武县| 阿合奇县| 休宁县| 桐乡市| 扎兰屯市| 栾城县| 兖州市| 从化市|