如果您希望为webman项目扩展功能,但缺乏统一的模块封装机制,则可能是由于未采用标准插件结构导致配置分散、复用困难。以下是编写webman自定义插件的具体方法:
一、基于console命令创建应用型插件
该方法适用于面向业务场景的功能封装,如钉钉通知、短信服务等,生成完整MVC结构并自动注册路由与菜单入口。
1、确保已安装webman/console命令行工具,执行composer require webman/console完成依赖引入。
2、在Webman项目根目录下执行插件创建命令,格式为php webman app-plugin:create {插件标识},例如php webman app-plugin:create dingdingtalk。
3、命令执行后将自动生成plugin/dingdingtalk/目录,包含controller、model、view、config、public等标准子目录。
4、编辑plugin/dingdingtalk/config/menu.php文件,定义左侧菜单项,其中'href' => '/app/dingdingtalk/setting'需与控制器路由匹配。
5、启动服务后访问http://127.0.0.1:8787/app/dingdingtalk,若返回预期内容则表示插件初始化成功。
二、基于vendor目录构建基础型Composer插件
该方法适用于通用技术组件封装,如加解密、日志增强等,支持通过Composer全局安装并自动合并配置至主项目。
1、使用php webman plugin:create {厂商名}/{插件名}命令初始化,例如php webman plugin:create tinywan/encryption。
2、插件代码存放于vendor/tinywan/encryption/,配置模板存放于config/plugin/tinywan/encryption/,两者路径由框架自动识别。
3、在vendor/tinywan/encryption/composer.json中声明PHP版本约束与扩展依赖,例如"ext-openssl": "*"和"php": ">=7.4"。
4、将核心逻辑类置于src/目录下,如Encryption.php,并在autoload段注册PSR-4自动加载规则。
5、在主项目中调用插件配置时,必须使用plugin前缀,例如config('plugin.tinywan.encryption.app')。
三、手动搭建无命令行依赖的轻量插件
该方法适用于受限环境或快速验证场景,不依赖console插件,通过纯目录结构与配置合并实现插件行为注入。
1、在项目根目录手动创建plugin/customlogger/目录,并在其内建立config/app.php与src/Logger.php。
2、config/app.php中返回关联数组,例如['level' => 'debug', 'path' => runtime/log/plugin],该配置将被Webman自动合并进config/app.php。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
3、在src/Logger.php中定义静态方法log(),内部调用support\Utils::log()或原生error_log()。
4、在任意控制器中通过plugin\customlogger\src\Logger::log('message')显式调用,或在中间件中通过config('plugin.customlogger.app.level')读取配置。
5、重启Webman服务,确认config/plugin/customlogger/app.php内容已出现在var_dump(config('plugin'))输出中。
四、配置驱动型插件开发(含中间件与进程注入)
该方法适用于需深度介入Webman生命周期的插件,如全局请求拦截、定时任务、自定义HTTP头处理等,依赖插件配置文件触发框架自动加载。
1、在插件config/目录下新建middleware.php,返回数组['plugin\customlogger\middleware\LogMiddleware']。
2、新建process.php,返回数组['plugin\customlogger\process\StatProcess'],其中StatProcess需实现Workerman\Worker接口。
3、在route.php中定义插件专属路由,格式为Route::get('/plugin/log/stats', [\plugin\customlogger\controller\StatsController::class, 'index'])。
4、确保config/plugin/{vendor}/{name}/路径下存在上述全部配置文件,Webman启动时会自动扫描并合并到config/顶层配置中。
5、验证中间件是否生效:发起一次HTTP请求,在LogMiddleware::process()中插入file_put_contents(runtime/log/mw.log, 'hit'),检查文件是否生成。
五、插件发布与跨项目复用流程
该方法确保插件可独立分发、版本控制及多项目集成,符合Composer生态规范,避免硬编码路径与配置耦合。
1、将插件目录整体复制至独立Git仓库,根目录保留composer.json,设置"name": "tinywan/encryption"与"type": "webman-plugin"。
2、在插件仓库根目录执行git tag v1.0.0打版本标签,并推送至GitHub/GitLab远程仓库。
3、在目标Webman项目中执行composer config repositories.tinywan vcs https://github.com/tinywan/encryption.git添加私有源。
4、执行composer require tinywan/encryption:v1.0.0安装,Composer将自动将插件复制至vendor/tinywan/encryption并触发配置拷贝逻辑。
5、检查config/plugin/tinywan/encryption/是否存在,且config('plugin.tinywan.encryption.app')可正常读取值,即表示发布链路贯通。










