国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Yii2依賴注入簡化開發

Luosunce / 3250人閱讀

摘要:本文代碼什么是依賴注入對象由框架來創建而不是程序員通過創建。解除了調用者與被調用者之間的依賴。的依賴注入通過提供容器特性。靈活使用可以使我們從依賴關系中解脫出來,專注于業務邏輯。

本文代碼

https://github.com/xialeistudio/yii2-di-demo

什么是依賴注入(DI)?

對象由框架來創建而不是程序員通過 new 創建。跟IoC差不多一個意思。

為什么要有依賴注入?

解耦。調用方不再通過 new 運算符實例化被調用對象,而通過框架(IoC容器)創建之后注入進來。解除了調用者與被調用者之間的依賴。

有利于面向接口編程。個人認為OOP程序設計最重要的就是面向接口(面向抽象)編程。因為有了第1步的關系,調用者只需要依賴接口類型而不用依賴實現類型,提高了程序的擴展性。

Yii2的依賴注入

Yii2通過 yiidiContainer 提供DI容器特性。目前支持一下4種方式注入:

構造方法注入

方法注入

Setter和屬性注入

PHP回調注入

注冊依賴關系

通過容器的 set 方法注入

通過配置文件注入(推薦)

依賴注入實戰

打開終端,執行以下命令初始化項目:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

聲明接口業務類 appservicesUserService


接口實現文件 appservicesimplUserServiceImpl

 1, "name" => "xialei"],
        ["id" => 2, "name" => "zhangsan"],
    ];

    public function show($id)
    {
        foreach ($this->users as $user) {
            if ($user["id"] == $id) {
                return $user;
            }
        }
        return null;
    }

    public function all()
    {
        return $this->users;
    }
}

注冊依賴關系 config/web.php

 "basic",
    "basePath" => dirname(__DIR__),
    "bootstrap" => ["log"],
    "aliases" => [
        "@bower" => "@vendor/bower-asset",
        "@npm" => "@vendor/npm-asset",
    ],
    "container" => [
        "definitions" => [
            UserService::class => UserServiceImpl::class
        ]
    ],
    "components" => [
        "request" => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            "cookieValidationKey" => "0xGrStOOZE2oXxNNiu-o2eYovJ_Ia1Dk",
        ],
        "response" => [
            "format" => "json"
        ],
        "errorHandler" => [
            "errorAction" => "site/error",
        ],
        "urlManager" => [
            "enablePrettyUrl" => true,
            "showScriptName" => false,
            "rules" => [
            ],
        ],
    ],
];

if (YII_ENV_DEV) {
    // configuration adjustments for "dev" environment
    $config["bootstrap"][] = "debug";
    $config["modules"]["debug"] = [
        "class" => "yiidebugModule",
        // uncomment the following to add your IP if you are not connecting from localhost.
        //"allowedIPs" => ["127.0.0.1", "::1"],
    ];

    $config["bootstrap"][] = "gii";
    $config["modules"]["gii"] = [
        "class" => "yiigiiModule",
        // uncomment the following to add your IP if you are not connecting from localhost.
        //"allowedIPs" => ["127.0.0.1", "::1"],
    ];
}

return $config;

添加控制器 appcontrollersUserController

userService = $userService;
        parent::__construct($id, $module, $config);
    }

    public function actionShow($id)
    {
        $user = $this->userService->show($id);
        if (empty($user)) {
            throw new NotFoundHttpException("用戶不存在");
        }
        return $user;
    }
    
    public function actionAll()
    {
        return $this->userService->all();
    }
}

運行測試服務器

./yii serve/index

訪問用戶列表接口 http://localhost:8080/user/all

[{
    "id": 1,
    "name": "xialei"
}, {
    "id": 2,
    "name": "zhangsan"
}]

訪問查看用戶接口 http://localhost:8080/user/show?id=1

{
    "id": 1,
    "name": "xialei"
}

寫在最后

如你所見,Yii2自帶的IoC容器使用起來還是挺方便的,觀測了Yii 配置優于編碼 的思想,Yii的組件基本上都可以在配置文件中進行配置而不需要手動編碼。

靈活使用DI可以使我們從依賴關系中解脫出來,專注于業務邏輯。

當然,業務邏輯的組織也是一個很大的研究課題,有興趣的可以去看看 DDD(領域驅動設計)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28679.html

相關文章

  • Yii2中的依賴注入

    摘要:構造器注入實現特定參數的構造函數,在新建對象時傳入所依賴類型的對象。 基本概念 1.依賴倒置(反轉)原則(DIP):一種軟件架構設計的原則(抽象概念,是一種思想)在面向對象編程領域中,依賴反轉原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統的依賴關系創建在高層次上,而具體的策略設置則應用在低層次的模塊上)形式,使得高層次的模塊不依賴于...

    harriszh 評論0 收藏0
  • 圖解Yii2框架依賴注入容器、服務定位器

    摘要:調用方法創建類得實例化對象,實際上又調用了依賴注入容器獲取每一個類的實例化對象。依賴注入容器自動解決待實例化類的依賴關系,并返回待實例化類的實例對象。 以下是Yii2源碼中,ServiceLocator(服務定位器)與Container(依賴注入容器)的關系解析圖。 一句話總結 Application繼承了ServiceLocator,是一個服務器定位器,ServiceLocator用...

    AlphaGooo 評論0 收藏0
  • yii2框架中的di容器源碼中了解反射的作用

    摘要:反射簡介參考官方簡介的話,具有完整的反射,添加了對類接口函數方法和擴展進行反向工程的能力。此外,反射提供了方法來取出函數類和方法中的文檔注釋。 反射簡介 參考官方簡介的話,PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文檔注釋。 YII2框架中示例 對于yii2框架,應該都知道di容器,...

    dantezhao 評論0 收藏0
  • 在Swoole環境下運行注入Yii2框架的thrift應用

    摘要:前兩天發布了使用來運行應用,項目雖然可以運行起來,但是周邊的生態如緩存,,日志等等并沒有跟上,實際上開發體驗比較差。周末研究了一下,把框架集成到了應用上。 前兩天發布了使用swoole來運行thrift應用,項目雖然可以運行起來,但是周邊的生態(如緩存,ORM,日志等等)并沒有跟上,實際上開發體驗比較差。周末研究了一下,把Yii2框架集成到了thrift應用上。 項目地址:https:...

    Tony_Zby 評論0 收藏0
  • yii過濾xss代碼,防止sql注入教程

    摘要:好啦,我們看看在框架的不同版本中是怎么處理攻擊,注入等問題的。那要是,又是怎樣處理的喃考慮目前國內網站大部分采集文章十分頻繁,更有甚者不注明原文出處,原作者更希望看客們查看原文,以防有任何問題不能更新所有文章,避免誤導繼續閱讀 作者:白狼 出處:http://www.manks.top/yii2_filter_xss_code_or_safe_to_database.html 本文版權...

    Shonim 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<