2016-12-09 15 views
0

Я работаю над основным учебником по использованию храповика, упомянутого здесь http://socketo.me/docs/push.Cakephp 3: Replace/zmq library namespace

Я создал тестовую установку для учебника, которая работает безупречно. Однако, когда я пытаюсь интегрировать настройку с 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 строки в простой PHP-файл за пределами CakePHP 3, то он работает. Когда я помещаю те же четыре строки внутри 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. Как я могу передавать данные в ZMQ очереди в моем CakePHP 3 APP?
  2. APP :: path() & APP :: classname(), похоже, работает только для классов в приложении CakePHP 3. Как проверить путь для определенного класса библиотеки поставщиков?
  3. Как правильно загрузить классы библиотеки поставщиков? (Я не хочу требовать/require_once их, как это необходимо сделать для каждого контроллера, который хочет публиковать данные с помощью храпового механизма)
  4. Является ли предположение о доступе к глобальному пространству имен через \ CLASSNAME неправильно?
  5. Моя вторая попытка доступа к классу библиотеки поставщиков в \ ZMQContext разрешена в App \ Controller \ ZMQ. Как это возможно, когда он должен был попытаться в корневом пространстве имен?
  6. ZMQContext не является частью библиотеки реакции/zmq, так это значит, что это часть стандартных привязок php для libzmq?
+0

Я узнал, что ZMQContext является частью API-интерфейса php для 0MQ и, таким образом, доступен для глобального пространства имен. Пожалуйста, игнорируйте 6-й вопрос. – 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)); 

Вторая спецификация пространства имен во второй строке отсутствует.