Cakephp 3:React / zmq库名称空间

时间:2016-12-09 06:42:13

标签: namespaces cakephp-3.0 zeromq ratchet reactphp

我正在研究使用此处提到的棘轮的基本教程http://socketo.me/docs/push

我已经为教程创建了一个完美无缺的测试设置。但是,当我尝试将设置与CakePHP 3集成时,我遇到了问题。棘轮和ZMQ服务器是独立的,只是教程中提到的方式。只需要下面的代码就可以进入CakePHP 3控制器:

$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://localhost:5555");
$socket->send(json_encode($entryData));

此代码基本上将新数据提交到ZMQ队列以转发到棘轮。如果我将相同的4行放在CakePHP 3代码库之外的普通PHP文件中,它就可以工作了。当我在APP \ Controller \ SamplesController中放置相同的四行时,它表示找不到类APP \ Controller \ ZMQContext。

CakePHP 3文档提到通过composer安装的供应商库将通过自动加载器自动提供。我通过以下命令安装了React \ ZMQ库:

php composer require react/zmq

我尝试通过以下命名空间访问该类,但它们都没有工作:

ZMQContext ( Class 'App\Controller\ZMQContext' not found )
\ZMQContext ( Class 'App\Controller\ZMQ' not found )
React\ZMQ\ZMQContext ( Class 'App\Controller\React\ZMQ\ZMQContext' not found )
\React\ZMQ\ZMQContext ( Class 'React\ZMQ\ZMQContext' not found )

可能错过了PHP中的一些命名空间概念,但我的理解是,如果ZMQContext通过全局命名空间在普通的PHP文件中可用,那么它也应该通过\ ZMQContext在CakePHP 3中可用。

我有以下问题:

  1. 如何在CakePHP 3 APP中将数据推送到ZMQ队列?
  2. APP :: path()& APP :: classname()似乎只适用于CakePHP 3应用程序中的类。如何检查特定供应商库类的路径?
  3. 如何正确自动加载供应商库类? (我不希望需要/ require_once它们,因为每个需要通过棘轮发布数据的控制器都需要这样做)
  4. 关于通过\ CLASSNAME访问全局命名空间的假设是错误的吗?
  5. 我第二次尝试访问\ ZMQContext中的供应商库类,解析为App \ Controller \ ZMQ。如果它应该在根命名空间内尝试,那怎么可能?
  6. ZMQContext不是react / zmq库的一部分,所以它是否意味着它是libzmq的默认php绑定的一部分?

1 个答案:

答案 0 :(得分:0)

这是一个简单的拼写错误问题:

$context = new \ZMQContext();
$socket = $context->getSocket(\ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://localhost:5555");
$socket->send(json_encode($entryData));

第二行中的第二个命名空间规范缺失。