对 events.php 设置 namespace YourApp; $worker->eventHandler = 'YourApp\Events'; 启动的时候,就会报错 Waring: Events::onMessage is not callable 这是按照文档来的,为什么还是报错呢,这是什么原因
没加载到文件吧
我也遇到了这个问题,经过自己摸索,已经 解决。 看了BusinessWorker类中,是通过is_callable函数来判断是否是函数的。 源码如下:
if (is_callable($this->eventHandler . '::onMessage')) { $this->_eventOnMessage = $this->eventHandler . '::onMessage'; } else { echo "Waring: {$this->eventHandler}::onMessage is not callable\n"; }
_这时我们心中的问题就是:那为何我们带入命名空间后还是无法通过is_callable的检测呢?_ 答案:我们的命名空间没有注册,无法被BusinessWorker发现。 解决方法:在composer.json中注册,代码如下(Application就是我的命名空间,您自己的可以根据实际情况修改Applications(命名空间)文件夹要composer.json同级):"
autoload": { "psr-4": { "Applications\\": "Applications/" } }
尝试了很多方式都没解决,我妥协了,用原生引入文件,
include_once __DIR__ .'/../../../../application/push/controller/Events.php'; $directory=new Events(); if (method_exists($directory,'onMessage')) { $this->_eventOnMessage = $this->eventHandler . '::onMessage'; } else { echo "Waring: {$this->eventHandler}::onMessage is not callable\n"; }
必须执行
composer dump-autoload
修改的 composer.json 文件配置自动加载才生效
没加载到文件吧
我也遇到了这个问题,经过自己摸索,已经 解决。
看了BusinessWorker类中,是通过is_callable函数来判断是否是函数的。
源码如下:
_这时我们心中的问题就是:那为何我们带入命名空间后还是无法通过is_callable的检测呢?_
答案:我们的命名空间没有注册,无法被BusinessWorker发现。
解决方法:在composer.json中注册,代码如下(Application就是我的命名空间,您自己的可以根据实际情况修改Applications(命名空间)文件夹要composer.json同级):"
尝试了很多方式都没解决,我妥协了,用原生引入文件,
必须执行
修改的 composer.json 文件配置自动加载才生效