1. 程式人生 > >yii2 引入第三方類庫

yii2 引入第三方類庫

在web應用的開發模式下,我們不可避免的總會遇到對第三方api的整合。比如支付寶支付和微信支付的sdk,再或者是各種簡訊api比如阿里大於的sdk整合等等等等。像這種類似的第三方很多,但是由於各個平臺的sdk的程式碼規範各有特色,對於新手,整合到我們的yii2中,似乎就是一件不那麼容易實現的操作。其實很容易,我一說你就懂。

今天我們將分別以支付寶、阿里大於和一個支援psr-4規範的Mailer類庫為例,來介紹下yii2整合第三方程式碼的4種方式。

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檔案中配置

 
  1. 'aliases' => [

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

  3. ],

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時,仍然需要在類的前面新增斜槓 \

轉載:https://blog.csdn.net/lhorse003/article/details/65626327

參考:https://www.yiichina.com/doc/guide/2.0/tutorial-yii-integration