2016-12-09 31 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)); 

在第二行中的第二個命名空間規範缺失。