插件启用状态变更不生效,需检查config/plugin.php是否return数组且键名为插件目录名;插件路由未注册需在主route.php中显式加载;插件配置读取须用完整路径如config('plugin.demo-plugin.enable')。

插件启用状态变更后不生效?检查 config/plugin.php 的 return 值是否为数组
Webman 读取 config/plugin.php 时,要求该文件必须 return 一个数组,且键名为插件目录名(如 'demo-plugin'),值为配置项。若你误写成 return true; 或直接写 ['demo-plugin' => ['enable' => false]]; 而没加 return,整个文件会被忽略,插件状态始终按默认(false)处理。
- 错误写法:
['demo-plugin' => ['enable' => true]];(缺return)→ 配置不加载 - 正确写法:
return ['demo-plugin' => ['enable' => true]]; - 调试建议:在控制器里执行
var_dump(config('plugin'));,确认输出是否为预期数组结构
插件路由没注册?确认 app-plugin 类型下 route.php 是否被 glob 加载
Webman 默认不会自动加载插件内的 route.php。如果你把路由写在 plugin/demo-plugin/config/route.php,但没显式引入,它就完全不会生效——浏览器访问对应路径直接 404。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
- 必须在主项目
config/route.php中手动追加加载逻辑:require_once base_path() . '/plugin/demo-plugin/config/route.php'; - 或统一用
glob()扫描(推荐):foreach (glob(base_path() . '/plugin/*/config/route.php') as $file) { require_once $file; } - 注意:
app-plugin的路由文件路径必须是config/route.php,不能放在app/或api/下
插件配置读不到?key 必须带完整插件前缀
Webman 插件配置合并后,不会扁平化到根命名空间。哪怕你在 plugin/demo-plugin/config/app.php 里写了 return ['debug' => true];,也不能用 config('app.debug') 获取,而必须拼全路径。
- 正确读法:
config('plugin.demo-plugin.app.debug') - 错误读法:
config('app.debug')、config('demo-plugin.app.debug') - 验证技巧:在控制器中
var_dump(config('plugin'));查看实际嵌套结构 - 额外注意:
config/plugin.php里的开关项(如'enable')也遵循此规则,应读作config('plugin.demo-plugin.enable')
插件类构造时报错“Connection refused”?协程上下文未隔离导致 PDO 复用
Webman 常驻内存 + 协程模型下,插件若在构造函数中直接 new PDO 或复用全局连接,极易在并发请求中触发连接冲突或超时——表现为随机报 PDOException: SQLSTATE[HY000] [2002] Connection refused。
- 解决方式:所有数据库操作类必须继承
support\Model,并重写getConnection()方法,确保每次协程调用获取独立实例 - 禁止在插件服务类的
__construct()中初始化连接,改用懒加载:private $db; public function getDb() { return $this->db ??= Db::connection(); } - 更稳妥做法:用
Container::get()绑定工厂闭包,延迟实例化,避免空转资源










