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