1) 首先 查看一下咱們的目錄結構php
2)使用日常的寫法來構造一下咱們的驗證ajax
這裏主要分四步在走,相對於使用獨立驗證器或者挨個數據驗證已經優化了大部分的代碼了,可是,當在使用中會發現,咱們在多個驗證或者多個模塊的時候會出現重複性的冗餘去寫這一串代碼thinkphp
問題? 如何將上訴的代碼壓縮成一行呢編程
AOP: 在不修改源代碼的狀況下給程序動態統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,提升代碼的靈活性和可擴展性,AOP能夠說也是這種目標的一種實現
AOP、OOP在字面上雖然很是相似,但倒是面向不一樣領域的兩種設計思想。OOP(面向對象編程)針對業務處理過程的實體及其屬性和行爲進行抽象封裝,以得到更加清晰高效的邏輯單元劃分。
咱們引入aop編程的思想來解決的咱們的問題,經過將功能單一的模塊合併統一塊兒來json
咱們在common
下建立 validate
目錄,而且建立一個BaseValidate
文件,繼承 think\validate
設計模式
<?php namespace app\common\validate; use app\common\controller\Base; use think\Request; use think\Validate; class BaseValidate extends Validate { /** * 基礎類控制器 * @param null|array $data * @return bool */ public function goCheck($data = null) { # 當 data 不存在的時候去自動校驗獲取到的參數 if( is_null($data) ) { # 獲取待驗證的參數 $data = Request::instance()->param(); } # 進行驗證 if( !$this->check($data) ) { (new Base())->ajaxjson(Base::error, $this->getError()); # 拋出的自定義異常 } return true; }
優化後代碼app
瞬間舒服了不少吧,省去了很是多的代碼了算是,由於這個東西在不少控制器下都是應該須要進行使用的優化
如baseValidate中的代碼,其中有一串代碼是is_null,那是爲了校驗全部傳遞上來的數據而編寫,當咱們須要校驗全部的數據的時候只須要這樣寫this
一樣能夠校驗出數據,可是會有一個疑惑,咱們沒有來獲取data數據,沒法使用data數據,仍是須要在控制器中從新進行獲取,這是不可取的,因此我選擇這樣作spa