我将gateway跟webman合在一起,但是在Events.php中使用数据库业务时报错,一直未找到原因,各位有遇到吗

0

Error: Class 'support\Model' not found in D:\www\webman\app\admin\model\MemberModel.php:6
Stack trace:


0 D:\www\webman\vendor\composer\ClassLoader.php(444): include()


1 D:\www\webman\vendor\composer\ClassLoader.php(322): Composer\Autoload\includeFile('D:\www\webman\v...')


2 [internal function]: Composer\Autoload\ClassLoader->loadClass('app\admin\model...')


3 D:\www\webman\app\admin\service\MemberService.php(76): spl_autoload_call('app\admin\model...')


4 D:\www\webman\gateway\Events.php(91): app\admin\service\MemberService::memEdit(Array, Array)


5 [internal function]: Events::onClose('7f00000108fc000...')


6 D:\www\webman\vendor\workerman\gateway-worker\src\BusinessWorker.php(414): call_user_func('Events::onClose', '7f00000108fc000...')


7 D:\www\webman\vendor\workerman\workerman\Connection\TcpConnection.php(637): GatewayWorker\BusinessWorker->onGatewayMessage(Object(Workerman\Connection\AsyncTcpConnection), Array)


8 D:\www\webman\vendor\workerman\workerman\Events\Select.php(293): Workerman\Connection\TcpConnection->baseRead(Resource id #46)


9 D:\www\webman\vendor\workerman\workerman\Worker.php(2430): Workerman\Events\Select->loop()


10 D:\www\webman\vendor\workerman\gateway-worker\src\BusinessWorker.php(197): Workerman\Worker->run()


11 D:\www\webman\vendor\workerman\workerman\Worker.php(1417): GatewayWorker\BusinessWorker->run()


12 D:\www\webman\vendor\workerman\workerman\Worker.php(1360): Workerman\Worker::forkWorkersForWindows()


13 D:\www\webman\vendor\workerman\workerman\Worker.php(542): Workerman\Worker::forkWorkers()


14 D:\www\webman\gateway\start_businessworker.php(30): Workerman\Worker::runAll()


15 {main}


Worker process terminated
process D:\www\webman\gateway\start_businessworker.php terminated and try to restart
ChatBusinessWorker none


截图
截图

已邀请:

lscho

赞同来自: tanghuangxia

根据你的情况,有两个问题要解决。


1.DB 类所在的 support 命名空间并不是通过 composer 自动加载的,而是 webman 框架处理的,但是你用 gateway 的 Events 时候,并没用经过 webman 处理,所以要先解决 support 命名空间的问题。 在 composer.json 的 autoload 中加上support,如下:


   "autoload": {
"psr-4": {
"app\\": "app/",
"support\\": "support/"
},
"files": [
"./support/helpers.php"
]
},

2.Db类并不能直接使用,而是在 webman 的 Bootstrap 中对 illuminate/database 又封装了一次,所以要把 Bootstrap 重新执行一下。在 BusinessWorker 的onWorkerStart中处理一下。


    foreach (config('bootstrap', []) as $class_name) {
/** @var \Webman\Bootstrap $class_name */
$class_name::start($worker);
}

这样在Events中就能使用了。


详见附件。

xamarin - 把开发作为兴趣的门外汉

赞同来自:

我也刚刚遇到这个问题,正在克服中

xamarin - 把开发作为兴趣的门外汉

赞同来自:

找个兄弟解决这个调用数据库的问题,付报酬200.我的QQ422800820,希望兄弟可以联系我.

BJ001 - 转战

赞同来自:

按照这个试了下,依然报错

xamarin - 把开发作为兴趣的门外汉

赞同来自:

请教一下 你怎么操作的

BJ001 - 转战

赞同来自:

我的也没有成功,今天再尝试下,不行的话就当做两个服务搞了。

cai584887013 - 菜鸟程序员

赞同来自:

可以用url的方式去请求

zjh - 玖零程序猿

赞同来自:

没有搞明白 为什么要在webman里面在使用getway呢 你再开启一个进程 不就好了??

xamarin - 把开发作为兴趣的门外汉

赞同来自:

https://wenda.workerman.net/question/6460 数据库加载项从webman中独立出来,单独初始化,可以和webnan一个时间启动.在webman 路径可以随便调用数据库,不需要初始化和在composer 里做额外的工作.webman 昨天的问题已完美解决,有类似的问题欢迎兄弟们交流.谢谢兄弟们.

要回复问题请先登录注册