events.php 设置命名空间

evilk

对 events.php 设置 namespace YourApp;
$worker->eventHandler = 'YourApp\Events';
启动的时候,就会报错 Waring: Events::onMessage is not callable
这是按照文档来的,为什么还是报错呢,这是什么原因

阅读 2883
4个回答

damao

没加载到文件吧

  • 暂无评论
zasray

我也遇到了这个问题,经过自己摸索,已经 解决。
看了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/"
    }
}

 

  • 暂无评论
小D

尝试了很多方式都没解决,我妥协了,用原生引入文件,

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";
 }
  • 暂无评论
Tinywan

必须执行

composer dump-autoload

修改的 composer.json 文件配置自动加载才生效

  • 暂无评论