成都网站建设设计

将想法与焦点和您一起共享

yii2中怎么引入第三方类库

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文件中配置

 
  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阿里大于类库中的类时,要在类名前面添加反斜杠 \

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

 
  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");  

同样,我们使用alipay包下面的类比如AlipaySubmit时,仍然需要在类的前面添加斜杠 \

关于yii2 中怎么引入第三方类库问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


网站栏目:yii2中怎么引入第三方类库
分享地址:http://chengdu.cdxwcx.cn/article/gcspis.html