前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yii2 引入第三方类库

yii2 引入第三方类库

作者头像
botkenni
发布2019-09-02 16:13:20
1.5K0
发布2019-09-02 16:13:20
举报
文章被收录于专栏:IT码农IT码农

在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的自动加载器,不信你看看是不是有这么一行代码

代码语言:javascript
复制
require(__DIR__ . '/../../vendor/autoload.php');

so,你懂了么?

官方自带的加载器

但是,实际上却有一部分不小的比例的人总是抱怨,composer安装不了,使用国内镜像也卡着不动,怎么破?我可不可以直接手动从github上下载使用?

当然可以。我们还以上面的Mailer为例,该类的命名方式符合psr-4标准,因此我们可以使用yii2自带的加载器来加载。

首先我们手动从github上下载,然后把下载下来的压缩包解压缩后放到你的vendor/bailangzhan/ 目录下,并重命名为 yii2-swiftmailer,现在vendor/bailangzhan下的目录结构是这样的

代码语言:javascript
复制
├─yii2-swiftmailer
│      composer.json
│      LICENSE
│      Mailer.php
│      README.md

注意我们没有使用composer安装哦。

我们注意到Mailer的命名空间是bailangzhan,所以我们在应用的config/main.php文件中配置

代码语言:javascript
复制
  1. 'aliases' => [
  2. '@bailangzhan' => '@vendor/bailangzhan',
  3. ],

aliases同components同级,位置不要放错。

现在你只需要像下面这样操作Mailer就好

代码语言:javascript
复制
$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文件之前添加下面一行代码

代码语言:javascript
复制
require(__DIR__ . '/../vendor/alidayu/TopSdk.php');

因为没有具体的命名空间,所以在代码中new阿里大于类库中的类时,要在类名前面添加反斜杠 \

如阿里大于可以像下面这样使用

代码语言:javascript
复制
  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

说到这些,有同学不禁要吐槽支付宝支付的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 目录,我们可以这样使用

  1. require_once(Yii::getAlias('@frontend')."/vendor/alipay/alipay.config.php");
  2. require_once(Yii::getAlias('@frontend')."/vendor/alipay/lib/alipay_submit.class.php");
代码语言:javascript
复制
同样,我们使用alipay包下面的类比如AlipaySubmit时,仍然需要在类的前面添加斜杠 \
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档