成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Yii2依賴注入簡化開發(fā)

Luosunce / 3292人閱讀

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

本文代碼

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

什么是依賴注入(DI)?

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

為什么要有依賴注入?

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

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

Yii2的依賴注入

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

構(gòu)造方法注入

方法注入

Setter和屬性注入

PHP回調(diào)注入

注冊依賴關(guān)系

通過容器的 set 方法注入

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

依賴注入實戰(zhàn)

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

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

聲明接口業(yè)務(wù)類 appservicesUserService


接口實現(xiàn)文件 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;
    }
}

注冊依賴關(guān)系 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();
    }
}

運行測試服務(wù)器

./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 配置優(yōu)于編碼 的思想,Yii的組件基本上都可以在配置文件中進行配置而不需要手動編碼。

靈活使用DI可以使我們從依賴關(guān)系中解脫出來,專注于業(yè)務(wù)邏輯。

當(dāng)然,業(yè)務(wù)邏輯的組織也是一個很大的研究課題,有興趣的可以去看看 DDD(領(lǐng)域驅(qū)動設(shè)計)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28679.html

相關(guān)文章

  • Yii2中的依賴注入

    摘要:構(gòu)造器注入實現(xiàn)特定參數(shù)的構(gòu)造函數(shù),在新建對象時傳入所依賴類型的對象。 基本概念 1.依賴倒置(反轉(zhuǎn))原則(DIP):一種軟件架構(gòu)設(shè)計的原則(抽象概念,是一種思想)在面向?qū)ο缶幊填I(lǐng)域中,依賴反轉(zhuǎn)原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統(tǒng)的依賴關(guān)系創(chuàng)建在高層次上,而具體的策略設(shè)置則應(yīng)用在低層次的模塊上)形式,使得高層次的模塊不依賴于...

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

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

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

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

    dantezhao 評論0 收藏0
  • 在Swoole環(huán)境下運行注入Yii2框架的thrift應(yīng)用

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

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

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

    Shonim 評論0 收藏0

發(fā)表評論

0條評論

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