首頁 > php框架 > ThinkPHP > thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

藏色散人
發布: 2021-04-08 08:42:13
轉載
2182 人瀏覽過

下面由thinkphp教學專欄為大家介紹thinkphp使用AOP切面程式設計快速驗證我們的數據,希望對需要的朋友有幫助!

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

thinkphp中使用AOP切面程式設計快速驗證我們的資料

1) 首先查看我們的目錄結構

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

2)使用平常的寫法來建構一下我們的驗證

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

這裡主要分四步在走,相對於使用獨立驗證器或挨個資料驗證已經優化了大部分的程式碼了,但是,當在使用中會發現,我們在多個驗證或多個模組的時候會出現重複性的冗餘去寫這一串代碼

問題? 如何將上訴的程式碼壓縮成一行呢

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;
        }
登入後複製

優化後程式碼

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

瞬間舒服了很多吧,省去了非常多的程式碼了算是,因為這個東西在很多控制器下都是應該需要進行使用的

優化2

如baseValidate中的程式碼,其中有一串程式碼是is_null,那是為了校驗所有傳遞上來的資料而寫,當我們需要校驗所有的數據的時候只需要這樣寫

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

#同樣可以校驗出數據,但是會有一個疑惑,我們沒有來獲取data數據,無法使用data數據,還是需要在控制器中重新進行獲取,這是不可取的,所以我選擇這樣做

thinkphp中如何使用AOP切面程式設計快速驗證我們的數據

以上是thinkphp中如何使用AOP切面程式設計快速驗證我們的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板