2016-12-09 39 views
0

我正在研究关于使用棘轮的基本教程,这里提到http://socketo.me/docs/pushCakephp 3:React/zmq库命名空间

我为本教程创建了完美无瑕的测试设置。但是,当我尝试将设置与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文档提到,通过作曲家安装的供应商库将通过自动加载器自动提供。我已经安装通过下面的命令作出反应\ 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文件中可用,那么它应该也可以在CakePHP 3中通过\ ZMQContext使用。

我有以下问题:

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

我发现ZMQContext是0MQ的php绑定API的一部分,因此可用于全局命名空间。请忽略第六个问题。 – i01000001

+0

其工作..相同的四行..这是非常奇怪的,我没有做任何改变只是重写了一切..所有的问题现在已经解决..现在请忽略这一个。 – i01000001

回答

0

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

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

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