thinkphp中使用AOP切面編程快速驗證我們的數據
1) 首先 查看一下我們的目錄結構
2)使用平常的寫法來構造一下我們的驗證
這裏主要分四步在走,相對於使用獨立驗證器或者挨個數據驗證已經優化了大部分的代碼了,但是,當在使用中會發現,我們在多個驗證或者多個模塊的時候會出現重複性的冗餘去寫這一串代碼
問題? 如何將上訴的代碼壓縮成一行呢
AOP: 在不修改源代碼的情況下給程序動態統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,提高代碼的靈活性和可擴展性,AOP可以說也是這種目標的一種實現
AOP、OOP在字面上雖然非常類似,但卻是面向不同領域的兩種設計思想。OOP(面向對象編程)針對業務處理過程的實體及其屬性和行爲進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分。
我們引入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數據,還是需要在控制器中重新進行獲取,這是不可取的,所以我選擇這樣做