thinkphp中使用AOP切面程式設計快速驗證我們的資料
thinkphp中使用AOP切面程式設計快速驗證我們的資料
1) 首先 檢視一下我們的目錄結構
2)使用平常的寫法來構造一下我們的驗證
這裡主要分四步在走,相對於使用獨立驗證器或者挨個資料驗證已經優化了大部分的程式碼了,但是,當在使用中會發現,我們在多個驗證或者多個模組的時候會出現重複性的冗餘去寫這一串程式碼
問題? 如何將上訴的程式碼壓縮成一行呢
AOP: 在不修改原始碼的情況下給程式動態統一新增功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,提高程式碼的靈活性和可擴充套件性,AOP可以說也是這種目標的一種實現
我們引入aop程式設計的思想來解決的我們的問題,通過將功能單一的模組合併統一起來
我們在 common
下建立 validate
目錄,並且建立一個 BaseValidate
檔案,繼承 think\validate
- BaseValidate.php
<?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; }
優化後代碼
瞬間舒服了很多吧,省去了非常多的程式碼了算是,因為這個東西在很多控制器下都是應該需要進行使用的
優化2
如baseValidate中的程式碼,其中有一串程式碼是is_null,那是為了校驗所有傳遞上來的資料而編寫,當我們需要校驗所有的資料的時候只需要這樣寫
同樣可以校驗出資料,但是會有一個疑惑,我們沒有來獲取data資料,無法使用data資料,還是需要在控制器中重新進行獲取,這是不可取的,所以我選擇這樣做