基础插件是一些通用组件,一般使用composer安装,代码放置于vendor
下。安装的时候可以将一些自定义的配置(中间件、进程、路由等配置)自动拷贝到{主项目}config/plugin
目录下,webman
会自动识别该目录配置并将配置合并到主配置当中,从而让插件可以介入到webman的任何生命周期当中。
composer create-project workerman/webman webman2024
composer require webman/console
webman/console
是一个webman命令行工具,更多了解请参考这里:https://www.workerman.net/plugin/1
这里以创建一个tinywan/encryption
插件,以AES高级加密标准为准,主要场景适用于和其他语言进行加解和解密。
AES 全称为 Advanced Encryption Standard,即高级加密标准,是一种常用密钥加密的块算法。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。
注意:
厂商名
和插件名
,例如这里厂商名是tinywan
,插件名是encryption
。厂商名
和插件名
是后面composer要发布的项目名,名称需要小写。php webman plugin:create --name=tinywan/encryption
创建插件后会生成目录 vendor/tinywan/encryption
用于存放插件相关文件 和 config/plugin/tinywan/encryption
用于存放插件相关配置。
vendor/tinywan/encryption
目录结构
├── vendor
│ ├── autoload.php
│ ├── tinywan
│ │ └── encryption
│ │ ├── composer.json
│ │ └── src
config/plugin/foo/admin
目录结构
.
├── app
│ ├── plugin
│ │ ├── tinywan
│ │ │ └── encryption
│ │ │ └── app.php
配置文件说明
app.php
主配置文件bootstrap.php
进程启动配置文件route.php
路由配置文件middleware.php
中间件配置文件process.php
自定义进程配置文件database.php
数据库配置文件redis.php
redis配置文件thinkorm.php
thinkorm 数据库配置文件database.php
数据库配置文件配置格式与webman相同,这些配置会自动被webman识别合并到配置当中。使用时以 plugin 为前缀访问,例如 config('plugin.tinywan.encryption.app')
;
开发插件在插件的生成目录vendor/tinywan/encryption
下进行编写。由于开发该插件需要借助于openssl扩展,所以需要在composer.json
配置文件指定一下依赖"ext-openssl": "*"
同时限制安装该扩展包PHP版本必须大于等于7.4
最终composer.json
内容如下
{
"name": "tinywan/encryption",
"type": "library",
"license": "MIT",
"description": "Webman plugin tinywan/encryption",
"require": {
"php": "^7.4",
"ext-openssl": "*"
},
"autoload": {
"psr-4": {
"Tinywan\\Encryption\\": "src"
}
}
}
加解密主文件Encryption.php
编写,注意该文件需要的vendor/tinywan/encryption/src
目录下进行编写
Encryption.php
文件
<?php
/**
* @desc Encryption
* @author Tinywan(ShaoBo Wan)
* @date 2024/1/4 9:28
*/
declare(strict_types=1);
namespace Tinywan\Encryption;
class Encryption
{
/** AES-128-ECB 加密方式*/
public const AES_128_ECB = 'AES-128-ECB';
/**
* @desc 加密
* @param string $data 加密的数据
* @param string $key 密钥,必须是16、24或32个字符长度
* @param string $algo 加密方式
* @param string $iv 初始向量(IV)
* @return string
* @author Tinywan(ShaoBo Wan)
*/
public static function encrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = ''): string
{
$encryptedBytes = openssl_encrypt($data, $algo, $key, OPENSSL_RAW_DATA);
return base64_encode($encryptedBytes);
}
/**
* @desc 解密
* @param string $data
* @param string $key 密钥,必须是16、24或32个字符长度
* @param string $algo 加密方式
* @param string $iv 初始向量(IV)
* @return false|string
* @author Tinywan(ShaoBo Wan)
*/
public static function decrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = '')
{
return openssl_decrypt(base64_decode($data), $algo, $key, OPENSSL_RAW_DATA);
}
}
注:以上的命名空间需要和
composer.json
的psr-4
命名空间保持一致
当开发完插件后,执行以下命令导出插件
php webman plugin:export --name=tinywan/encryption
输出以下内容
Export Plugin
Create /home/www/build/webman2024/vendor/tinywan/encryption/src/Install.php
Copy config/plugin/tinywan/encryption to /home/www/build/webman2024/vendor/tinywan/encryption/src/config/plugin/tinywan/encryption
Saved tinywan/encryption to /home/www/build/webman2024/vendor/tinywan/encryption
导出说明
config/plugin/tinywan/encryption
目录拷贝到vendor/tinywan/encryption/src
下,同时自动生成一个Install.php
,Install.php
用于自动安装和自动卸载时执行一些操作。vendor/tinywan/encryption/src
下的配置拷贝到当前项目config/plugin
下config/plugin
下的配置文件删除Install.php
以便在安装和卸载插件时做一些自定义操作。导出后的目录结构
vendor
├── autoload.php
├── tinywan
│ └── encryption
│ ├── composer.json
│ └── src
│ ├── config
│ │ └── plugin
│ │ └── tinywan
│ │ └── encryption
│ │ └── app.php
│ ├── Encryption.php
│ └── Install.php
这里发布插件,就是把基础插件包通过Composer发布到官方仓库。更多了解:如何发布一个自己的Composer依赖包
Composer是 用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码。
encryption
cd webman2024/vendor/tinywan/encryption
echo "# ddd" >> README.md
git init
git add ./
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:Tinywan/encryption.git
git push -u origin main
注:提交地址为Github仓库地址
https://github.com/Tinywan/encryption/releases/new
发布一个releases
如 v1.0.0
重新查看https://packagist.org/packages/tinywan/encryption
页面点击 Update
按钮更新版本,可以看到刚才发布的v1.0.0
的版本已经更新到官方仓库了
使用基础插件就是可以正常使用composer包一样简单喔!
安装
composer require tinywan/encryption
使用
require __DIR__ . '/../vendor/autoload.php';
$key = '4d7f2e7fe8e450385253bf379b13e432';
$encrypt = \Tinywan\Encryption\Encryption::encrypt('开源技术小栈',$key);
echo '加密结果:'.$encrypt. PHP_EOL;
$decrypt = \Tinywan\Encryption\Encryption::decrypt($encrypt,$key);
echo '解密结果:'.$decrypt. PHP_EOL;
打印结果
加密结果:cmmXBbPpzjZmhP9lAB80IV793zRy++ZfqzD3VNEO0Gk=
解密结果:开源技术小栈