[LyApi Notes] 使用宝塔面板部署LyApi


宝塔面板快速部署LyApi

目前宝塔面板已支持一键部署LyApi框架!

一. 宝塔面板

关于宝塔

宝塔面板官网:https://www.bt.cn/

  • 一键配置服务器环境(LAMP/LNMP)
  • 一键安全重启
  • 一键创建管理网站、ftp、数据库
  • 一键配置(定期备份、数据导入、伪静态、301、SSL、子目录、反向代理、切换PHP版本)
  • 一键安装常用PHP扩展
  • 数据库一键导入导出
  • 系统监控(CPU、内存、磁盘IO、网络IO)
  • 防火墙端口放行
  • SSH开启与关闭及SSH端口更改
  • 禁PING开启或关闭
  • 方便高效的文件管理器(上传、下载、压缩、解压、查看、编辑等等)
  • 计划任务(定期备份、日志切割、shell脚本)
  • 软件管理(一键安装、卸载、版本切换)

安装方法

// Linux - Centos
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

// Linux - Ubuntu Or Deepin
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

// Linux - Debian
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh

// Linux - Fedora
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

// Windows
Windows可以直接使用安装包:http://download.bt.cn/win/panel/BtSoft.zip

更多问题请前往宝塔官网查看!

安装LyApi

安装宝塔面板并配置好后,打开软件商店中的一键部署,选择框架标签:

BT-LyApi1.jpg

点击LyApi的一键部署,并写好配置:

BT-LyApi2.jpg

PS: 框架并不要求马上创建数据库,本次创建为宝塔要求。

创建完毕后,就可以直接访问了:

BT-LyApi3.jpg

PS: 直接部署的项目访问不需要public目录,直接访问根目录即可。


[LyApi Notes] 前置输出:一个愚蠢的功能


前置输出

前置输出功能是我在框架V1.2.3版本更新的。

当时没想太多,随手增加了这个功能。这两天在重构代码时,发现了一个严重的问题!如果使用了前置输出,那么后面的Header设置将不起作用(这是很基础的问题,不知道当时我为什么没想到)。

目前面临的问题

框架的所有数据输出都是在经过多层处理后打印的,而前置输出功能我是直接加在了整个"output"函数的最上方!也就是说如果使用了前置输出,那么后面的所有header设置都将失效,这可是一个大问题啊。

想到的解决方法

打算对代码进行修改,让前置输出功能在设置header之后,输出数据之前执行。但由于框架代码结构的原因,这个修改可能需要花费一些时间,所以我先把优先输出功能给关闭了,暂时不开放使用。

其他注意事项

目前还有一个问题:不要在接口对象下的构造函数和初始函数中写输出,否则会遇到同样的问题。


[LyApi News] V1.3.3 - 新特性


在 2019/08/14 LyApi更新了1.3.3版本,这个版本引入了一些神奇的功能 ...

返回 Code 和 Message :

这个功能在1.3.0就已经增加,但在1.3.3版本再次完善。

有时候我们希望运行成功的接口的状态码和信息并不是定死的,而是可以自定义的:

来试试这段代码:

return array(
    "#code" => 233,
    "#msg" => "Hello Custom Message"
    // 你的数据返回 ....
);

运行结果为:

{"code":233,"data":YourData,"msg":"Hello Custom Message"}

可以看到,在我们程序运行成功后,我们依旧可以自定义code和msg的内容!

!!! 更新在V1.3.3的新特性:

我们可以对自定义结构的值进行设置了:

先在api.php配置文件中增加自定义结构:

'DEFAULT_RESPONSE' => array(            //响应数据结构
    'code' => '$code',
    'data' => '$data',
    'msg' => '$msg'
    'using' => '$usi'                // 就是增加这个,一个新的内容
)

接着,对上面的代码进行修改:

return array(
    "#code" => 233,
    "#msg" => "Hello Custom Message",
    "#usi" => true
    // 你的数据返回 ....
);

此时的运行结果为:

{"code":233,"data":YourData,"msg":"Hello Custom Message","using":true}

可以看到,我们成功的设置using为: true !!!

类变量设置 Code 和 Message :

上一个方法很简单,但是我们还准备了另外一种方法供大家选择:

我们可以直接在函数中使用一个方法:$this->SetFuncData(Funcname,Data);

它接受两个参数,当前函数名(一定不能写错)和 存入的数据!

$this->SetFuncData('Test',[
    'code' => 123,
    'msg' => 'Hello Demo.Test'
]);

return YourData;

程序运行结果:

{"code":123,"data":YourData,"msg":"Hello Demo.Test"}

还有一种方法:

$this->SetFuncData('Test',[
    'code' => 123,
    'data' => YourData,
    'msg' => 'Hello Demo.Test'
]);

程序运行结果和上面的一样!

我们省略了return步骤,将data直接设置到了函数数据中,也是可以正常运行的!

关于上面两个特性的优先级 :

当我们同时使用上面两个特性时,程序会以哪个为结果呢?

答案是: 返回(Return)方法 : 如果两个同时存在时,程序会使用Return的数据作为结果。


[LyApi News] V1.3.0 - 插件系统


LyApi插件系统

插件系统添加于: 框架版本 V1.3.0

关于LyApi插件系统

LyApi提供插件系统主要是为了让接口开发更加简单,你可以使用别人开发的插件,避免重复造轮子。

插件下载及发布:官方论坛 OR QQ交流群

LyApi插件代码结构

插件代码将被放置在 ./plugin 目录下!

目录下将会带有两个文件夹:

  • Core - 插件核心代码,基本上所有插件都依赖于本文件
  • Template - 插件开发模板,可快速完成插件开发

下载的插件也需放在这个目录下(插件目录名不可随意更改)。

LyApi插件引入方法

安装插件后我们该如何使用插件呢?

有两种方法:

// 通过 DI 进行动态获得插件中的某个类: 
$plugin = DI::PluginDyn('插件名','类名',类参数...);

//比如获取PConfig的PConfig类: 
$TestConfig = DI::PluginDyn('PConfig','PConfig','Test');
//直接创建插件类
$config = new PConfig('Test');

PS: 如无法加载插件,请检查插件目录名和命名空间是否一致。

插件前置系统

一些插件可能需要另外一个插件作为前置!这个时候插件作者应该会叙述清楚到底需不需要安装任何插件作为前置。

比如在READEME中声明,也可以给一个前置检测的函数。

LyApi插件开发

插件开发其实挺简单,就像我们平时封装类一样。

QQ截图20190810000303.png

这是我开发的PConfig插件:可以看到,我们在构造函数中接收了插件需要的参数,并设置了插件信息(插件信息必须设置)。

插件类是继承了同目录下的Core插件的,这会为我们的开发带来很多帮助。

接下来,我们只需要编写自己需要的函数即可。

PS: 开发插件时建议直接使用Template模板,模板会告诉你你到底需要做什么:

QQ截图20190810000933.png

其他内容

博客主要对一些更新信息作出补充,其他内容还请前往官方文档查看


[Develop Notes] Electron 版本问题


之前的Electron程序都是在家里用Windows系统写的。今天有事要出门,便把代码拷到MacBook上。运行的时候各种报错,当时心里还在想“这跨平台不可靠啊”,结果一查Electron版本才发现:Mac上是2.0.9,最新版本是5.0.7。我便把版本更新了一下,程序就可以正常运行了!

把更新指令记录一下:

安装 Electron 最新稳定的版本:

npm install --save-dev electron

现有项目更新到最新的稳定版本(我使用的是这个指令):

npm install --save-dev electron@latest