您好,登錄后才能下訂單哦!
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文件中配置
'aliases' => [
'@bailangzhan' => '@vendor/bailangzhan',
],
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)名前面添加反斜杠 \
如阿里大于可以像下面這樣使用
$c = new \TopClient;
$c ->appkey = $appkey ;
$c ->secretKey = $secret ;
$req = new \AlibabaAliqinFcSmsNumSendRequest;
$req ->setExtend( "" );
$req ->setSmsType( "normal" );
$req ->setSmsFreeSignName( "" );
$req ->setSmsParam( "" );
$req ->setRecNum( "13000000000" );
$req ->setSmsTemplateCode( "" );
$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 目錄,我們可以這樣使用
require_once(Yii::getAlias('@frontend')."/vendor/alipay/alipay.config.php");
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í)。
免責(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)容。