abei1982 2017-03-24 21:20:43 8587次浏览 1条回复 17 3 0

我们爱composer,但是总有一些我们需要的扩展还没有加入到composer大家庭,那么我们的大Yii2如何爱他们那?

对于没有进入composer的扩展,请通通将他们下载到vendor内。通通的。

还是按照目录来

  1. 添加不在composer,但是有自己的autoloader的扩展
  2. 添加不在composer,也没有autoloader的扩展
  3. 添加在composer里的扩展
  4. 啥都没有的

那我们开始吧~

号外

先说说自动安装composer扩展吧,当复习了,这个我想是最简单的了,方法有两个

  1. composer.json内修改,增加我们想要的扩展,然后执行composer install
  2. 在当前程序目录直接命令行 composer required xxxxx

无论各种教程还是官方介绍最多的就是这个了,因此我不在多说,进入到今天的主题?

不composer,有autoloader

这种库也蛮多的,尤其一些已经有些年头有些粉丝的库,他们都有自己的autoloader加载器,今天北哥给你讲讲这种库怎么破!

我们都知道入口文件index.php里有两个自动加载,一个是composer的、一个是自己的。

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

你不知道?扒光拖出去,送往东莞。

如果你要加载一个有自动加载器的扩展,那就直接将其加载器放到Yii.php这行上面就成了。

你肯定要问有例子么?北哥会没有么?我们就拿最自大的阿里大鱼来说事吧,它能发短信啥的,不过收费。

Snip20170324_17.png

看到了吧,这货自己有个加载器,太不入群了,没事,我们大Yii是很包容的。按照北哥告诉你的,将其库放到vendor下,然后修改web/index.php文件。

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/alidayu/TopSdk.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

大鱼有些特殊性,需要提前一些常量设置,我们引入了TopSdk.php(内已经require("Autoloader.php"))。

然后我们在控制器里编写实现逻辑看看是否引入正确

public function actionDayu(){
	$model = new \TopClient();
        var_dump($model);
}

看看结果 Snip20170324_20.png

看到了吧,已经输出了TopClient对象,我们将自带加载器的阿里大鱼引入到Yii内成功。

不composer无autoloader,有PSR-4

如果你不知道什么是PSR-4,那你真该补补了,因为它太太太重要了。

真不知道???那先补补 http://nai8.me/sapper-index.html?topic=30

对于库符合PSR-4编写标准的也比较好破。

我们开始讲,我先模拟一个第三方库,它的目录结构是:

  • abei2017/hello/src/
  • abei2017/hello/src/Hello.php

Hello.php内容是

namespace abei2017\hello;

class Hello {
    public function say(){
        echo "hello abei2017";
    }
}

你看到了,abei2017\hello对应abei2017/hello/src/,此库是符合PSR-4标准的,那么就变的简单了。

我们首先将abei2017文件夹放到vendor

Snip20170324_16.png

然后,打开vendor/yiisoft/extensions.php 文件,在里面的数组里增加一项,如下面代码

'abei2017/hello' =>
    array (
        'name' => 'abei2017/hello',
        'version' => '0.0.3.0',
        'alias' =>
            array (
                '@abei2017/hello' => $vendorDir . '/abei2017/hello/src',
            ),
    ),

重点是 alisa的设置,代表命名空间到src的映射。

好,我们在控制器里测试一下

namespace app\controllers;

use abei2017\hello\Hello;
use yii\web\Controller;

class Abei2017Controller extends Controller {

    public function actionIndex(){
        $abei = new Hello();
        echo $abei->say();
    }
}

结果你知道的,“hello abei2017”真的出来了。

什么?你不信么?好,你可以将Hello.php文件改成Hello1.php,这样它就不符合PSR-4标准了,然后运行试试,被虐的没话说的你会。Yii果断拒绝了你。

添加在composer里的扩展

有朋友会说,我要用的是composer里的扩展,但是我用不了composer,可不可以从扩展的github上下载源文件下来进行集成那?

必须可以的

composer上的扩展包都是带有加载机制的,可以在composer.json的autoload字段找到其加载形式,有PSR-4、PSR-0的,那么你可以根据上面两条的方法进行安装就可以。

你可以看下我的这篇分享了解composer的四种自动加载方式 http://nai8.me/sapper-view.html?id=33

我是扩展 我啥都没有 我是流氓

遇到此类扩展,还等什么,一句inlcude or require 大爱包含所有。当然,我也要说,此类扩展并没有进入到Yii的扩展体系,没办法,编外人士,用用罢了。

有个好消息,北哥工兵连扩招中,每天获得北哥干货分享,点击查看

觉得很赞
  • 回复于 2017-03-25 00:07 举报

    学习了,棒棒哒,感谢指教

    1 条回复
    回复于 2017-03-25 00:16 回复

    恩恩,客气了,关注我公众号了没,记得关注。

您需要登录后才可以回复。登录 | 立即注册