您好,登錄后才能下訂單哦!
yii2 中怎么引入第三方類庫,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
composer包
如果第三方代碼是發布的composer包,這個集成往往是最簡單的。
以這個支持psr-4的Mailer為例,你只需要用composer require命令安裝,安裝好了就可以直接在代碼中使用了(如果需要,點擊Mailer的鏈接,使用規則參考github上面的說明)。
這是為什么呢,為什么你可以直接使用,你手動require了嗎?
我們知道,composer是php的包管理器,它本身就提供了一個自動加載器,能把composer下載的類文件全部加載進來,也就是說,只要我們在項目中引入這個自動加載的類,所有composer安裝的庫都可以直接使用。
我知道你想說你沒有做任何操作,確實你沒有。這是因為我們早已經在應用的入口文件index.php內require了composer的自動加載器,不信你看看是不是有這么一行代碼
require(__DIR__ . '/../../vendor/autoload.php');
so,你懂了么?
官方自帶的加載器
但是,實際上卻有一部分不小的比例的人總是抱怨,composer安裝不了,使用國內鏡像也卡著不動,怎么破?我可不可以直接手動從github上下載使用?
當然可以。我們還以上面的Mailer為例,該類的命名方式符合psr-4標準,因此我們可以使用yii2自帶的加載器來加載。
首先我們手動從github上下載,然后把下載下來的壓縮包解壓縮后放到你的vendor/bailangzhan/ 目錄下,并重命名為 yii2-swiftmailer,現在vendor/bailangzhan下的目錄結構是這樣的
├─yii2-swiftmailer │ composer.json │ LICENSE │ Mailer.php │ README.md
注意我們沒有使用composer安裝哦。
我們注意到Mailer的命名空間是bailangzhan,所以我們在應用的config/main.php文件中配置
'aliases' => [
'@bailangzhan' => '@vendor/bailangzhan',
],
aliases同components同級,位置不要放錯。
現在你只需要像下面這樣操作Mailer就好
$mailer = new \bailangzhan\Mailer(\bailangzhan\Mailer::TYPE_1, $message)
利用第三方自己的自動加載器
有同學又要說了,哎呀呀,你這上面說的都是帶composer的類庫,阿里大魚木有composer,只有一個他自己的Autoloader類,這個怎么操作喃?
有Autoloader自動加載就顯得非常方便了,一般情況下,我們只需要在入口文件內引入這個自帶的Autoloader類,就可以在代碼中直接使用了。使用方法參考下面我們要說的阿里大于的使用方法。
把阿里大于的sdk下載下來,我們放到應用的vendor/alidayu目錄下面,即 frontend/vendor/alidayu/Autoloader.php,相關目錄需要自己創建。
因為阿里大魚的sdk比較特殊,需要在引入Autoloader之前定義一些常量,即TopSdk文件內定義的且該文件有require("Autoloader.php"),所以我們實際需要引入的則是這個文件。
在index.php文件中,require Yii.php文件之前添加下面一行代碼
require(__DIR__ . '/../vendor/alidayu/TopSdk.php');
因為沒有具體的命名空間,所以在代碼中new阿里大于類庫中的類時,要在類名前面添加反斜杠 \
如阿里大于可以像下面這樣使用
$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
說到這些,有同學不禁要吐槽支付寶支付的sdk,什么玩意,啥都沒有。怎么辦,怎么使用?
composer雖然給我們提供了很多的便利,但是有了composer不能忘本呀。從上面的例子中我們可以看出,無論是composer的自動加載還是yii官方自帶的自動加載抑或是第三方代碼帶的自動加載,其實質都是require所有相關的類。
既然如此,對于支付寶這種無composer,不滿足psr-4,無Autoloader的“三無”第三方,我們只能使出“殺手锏”:手動require!
怎么個手動require呢?以支付寶sdk為例,我們可能用的最多的就是sdk包下面的alipay.config.php和alipay_submit.class.php,假設我們把支付寶的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包下面的類比如AlipaySubmit時,仍然需要在類的前面添加斜杠 \
關于yii2 中怎么引入第三方類庫問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。