溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

yii2 中怎么引入第三方類(lèi)庫(kù)

發(fā)布時(shí)間:2021-06-22 15:04:43 來(lái)源:億速云 閱讀:395 作者:Leah 欄目:大數(shù)據(jù)

yii2 中怎么引入第三方類(lèi)庫(kù),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

composer包

如果第三方代碼是發(fā)布的composer包,這個(gè)集成往往是最簡(jiǎn)單的。

以這個(gè)支持psr-4的Mailer為例,你只需要用composer require命令安裝,安裝好了就可以直接在代碼中使用了(如果需要,點(diǎn)擊Mailer的鏈接,使用規(guī)則參考github上面的說(shuō)明)。

這是為什么呢,為什么你可以直接使用,你手動(dòng)require了嗎?

我們知道,composer是php的包管理器,它本身就提供了一個(gè)自動(dòng)加載器,能把composer下載的類(lèi)文件全部加載進(jìn)來(lái),也就是說(shuō),只要我們?cè)陧?xiàng)目中引入這個(gè)自動(dòng)加載的類(lèi),所有composer安裝的庫(kù)都可以直接使用。

我知道你想說(shuō)你沒(méi)有做任何操作,確實(shí)你沒(méi)有。這是因?yàn)槲覀冊(cè)缫呀?jīng)在應(yīng)用的入口文件index.php內(nèi)require了composer的自動(dòng)加載器,不信你看看是不是有這么一行代碼

require(__DIR__ . '/../../vendor/autoload.php');

so,你懂了么?

官方自帶的加載器

但是,實(shí)際上卻有一部分不小的比例的人總是抱怨,composer安裝不了,使用國(guó)內(nèi)鏡像也卡著不動(dòng),怎么破?我可不可以直接手動(dòng)從github上下載使用?

當(dāng)然可以。我們還以上面的Mailer為例,該類(lèi)的命名方式符合psr-4標(biāo)準(zhǔn),因此我們可以使用yii2自帶的加載器來(lái)加載。

首先我們手動(dòng)從github上下載,然后把下載下來(lái)的壓縮包解壓縮后放到你的vendor/bailangzhan/ 目錄下,并重命名為 yii2-swiftmailer,現(xiàn)在vendor/bailangzhan下的目錄結(jié)構(gòu)是這樣的

├─yii2-swiftmailer
│      composer.json
│      LICENSE
│      Mailer.php
│      README.md

注意我們沒(méi)有使用composer安裝哦。

我們注意到Mailer的命名空間是bailangzhan,所以我們?cè)趹?yīng)用的config/main.php文件中配置

 
  1. 'aliases' => [

  2. '@bailangzhan' => '@vendor/bailangzhan',

  3. ],

aliases同components同級(jí),位置不要放錯(cuò)。

現(xiàn)在你只需要像下面這樣操作Mailer就好

$mailer = new \bailangzhan\Mailer(\bailangzhan\Mailer::TYPE_1, $message)

利用第三方自己的自動(dòng)加載器

有同學(xué)又要說(shuō)了,哎呀呀,你這上面說(shuō)的都是帶composer的類(lèi)庫(kù),阿里大魚(yú)木有composer,只有一個(gè)他自己的Autoloader類(lèi),這個(gè)怎么操作喃?

有Autoloader自動(dòng)加載就顯得非常方便了,一般情況下,我們只需要在入口文件內(nèi)引入這個(gè)自帶的Autoloader類(lèi),就可以在代碼中直接使用了。使用方法參考下面我們要說(shuō)的阿里大于的使用方法。

把阿里大于的sdk下載下來(lái),我們放到應(yīng)用的vendor/alidayu目錄下面,即 frontend/vendor/alidayu/Autoloader.php,相關(guān)目錄需要自己創(chuàng)建。

因?yàn)榘⒗锎篝~(yú)的sdk比較特殊,需要在引入Autoloader之前定義一些常量,即TopSdk文件內(nèi)定義的且該文件有require("Autoloader.php"),所以我們實(shí)際需要引入的則是這個(gè)文件。

在index.php文件中,require Yii.php文件之前添加下面一行代碼

require(__DIR__ . '/../vendor/alidayu/TopSdk.php');

因?yàn)闆](méi)有具體的命名空間,所以在代碼中new阿里大于類(lèi)庫(kù)中的類(lèi)時(shí),要在類(lèi)名前面添加反斜杠 \

如阿里大于可以像下面這樣使用

 
  1.  

    $c = new \TopClient;  

  2.  

    $c ->appkey = $appkey ;  

  3.  

    $c ->secretKey = $secret ;  

  4.  

    $req = new \AlibabaAliqinFcSmsNumSendRequest;  

  5.  

    $req ->setExtend( "" );  

  6.  

    $req ->setSmsType( "normal" );  

  7.  

    $req ->setSmsFreeSignName( "" );  

  8.  

    $req ->setSmsParam( "" );  

  9.  

    $req ->setRecNum( "13000000000" );  

  10.  

    $req ->setSmsTemplateCode( "" );  

  11.  

    $resp = $c ->execute( $req );  

吐槽支付寶,原生require

說(shuō)到這些,有同學(xué)不禁要吐槽支付寶支付的sdk,什么玩意,啥都沒(méi)有。怎么辦,怎么使用?

composer雖然給我們提供了很多的便利,但是有了composer不能忘本呀。從上面的例子中我們可以看出,無(wú)論是composer的自動(dòng)加載還是yii官方自帶的自動(dòng)加載抑或是第三方代碼帶的自動(dòng)加載,其實(shí)質(zhì)都是require所有相關(guān)的類(lèi)。

既然如此,對(duì)于支付寶這種無(wú)composer,不滿(mǎn)足psr-4,無(wú)Autoloader的“三無(wú)”第三方,我們只能使出“殺手锏”:手動(dòng)require!

怎么個(gè)手動(dòng)require呢?以支付寶sdk為例,我們可能用的最多的就是sdk包下面的alipay.config.php和alipay_submit.class.php,假設(shè)我們把支付寶的sdk下載后放置在frontend\vendor\alipay 目錄,我們可以這樣使用

  1.  

    require_once(Yii::getAlias('@frontend')."/vendor/alipay/alipay.config.php");  

  2.  

    require_once(Yii::getAlias('@frontend')."/vendor/alipay/lib/alipay_submit.class.php");  

同樣,我們使用alipay包下面的類(lèi)比如AlipaySubmit時(shí),仍然需要在類(lèi)的前面添加斜杠 \

關(guān)于yii2 中怎么引入第三方類(lèi)庫(kù)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

yii
AI