10分钟教你学会Yii2手动安装第三方扩展 [ 技术分享 ]
我们爱composer,但是总有一些我们需要的扩展还没有加入到composer大家庭,那么我们的大Yii2如何爱他们那?
对于没有进入composer的扩展,请通通将他们下载到vendor内。通通的。
还是按照目录来
- 添加不在composer,但是有自己的autoloader的扩展
- 添加不在composer,也没有autoloader的扩展
- 添加在composer里的扩展
- 啥都没有的
那我们开始吧~
号外
先说说自动安装composer扩展吧,当复习了,这个我想是最简单的了,方法有两个
- composer.json内修改,增加我们想要的扩展,然后执行composer install
- 在当前程序目录直接命令行 composer required xxxxx
无论各种教程还是官方介绍最多的就是这个了,因此我不在多说,进入到今天的主题?
不composer,有autoloader
这种库也蛮多的,尤其一些已经有些年头有些粉丝的库,他们都有自己的autoloader加载器,今天北哥给你讲讲这种库怎么破!
我们都知道入口文件index.php里有两个自动加载,一个是composer的、一个是自己的。
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
你不知道?扒光拖出去,送往东莞。
如果你要加载一个有自动加载器的扩展,那就直接将其加载器放到Yii.php这行上面就成了。
你肯定要问有例子么?北哥会没有么?我们就拿最自大的阿里大鱼来说事吧,它能发短信啥的,不过收费。
看到了吧,这货自己有个加载器,太不入群了,没事,我们大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);
}
看看结果
看到了吧,已经输出了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下
然后,打开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的扩展体系,没办法,编外人士,用用罢了。
有个好消息,北哥工兵连扩招中,每天获得北哥干货分享,点击查看
共 1 条回复
abei1982 河南洛阳
最后登录:2020-04-14
在线时长:128小时48分
- 粉丝307
- 金钱4935
- 威望50
- 积分6715