Ratchet - не удалось получить строку запроса на стороне сервера
На стороне клиента:
var ws = new WebSocket('ws://localhost:8082/chat?id=123&tid=7');
На стороне сервера
class MyApp implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
var_dump($conn->WebSocket->request->getQuery()); // I tried to access to query string here, but it did not work
$this->clients->attach($conn);
}
...
}
Вот результат дампа, который я получил от своей консоли
class Guzzle\Http\QueryString#85 (5) {
protected $fieldSeparator =>
string(1) "&"
protected $valueSeparator =>
string(1) "="
protected $urlEncode =>
string(8) "RFC 3986"
protected $aggregator =>
NULL
protected $data =>
array(0) {
}
}
Я не вижу никакой подсказки о значении двух строк запроса в моем URL id
а также tid
, Обновлено: я пытался сбросить все в переменной $request
на Http/Route, чтобы проверить, я вижу, как работает getQuery, но как я могу сделать то же самое с функцией onOpen?
protected $url =>
class Guzzle\Http\Url#67 (8) {
protected $scheme =>
string(4) "http"
protected $host =>
string(9) "localhost"
protected $port =>
int(8082)
protected $username =>
NULL
protected $password =>
NULL
protected $path =>
string(5) "/chat"
protected $fragment =>
NULL
protected $query =>
class Guzzle\Http\QueryString#66 (5) {
protected $fieldSeparator =>
string(1) "&"
protected $valueSeparator =>
string(1) "="
protected $urlEncode =>
string(8) "RFC 3986"
protected $aggregator =>
NULL
protected $data =>
array(3) {
...
}
}
}
Сообщение передается правильно между клиентом и сервером, но строки запроса. Любая помощь приветствуется.
1 ответ
Решение
Я действительно не понимаю следующий код в src\Ratchet\Http, тогда я не уверен, является ли это ошибкой или нет.
$parameters = array();
foreach($route as $key => $value) {
if ((is_string($key)) && ('_' !== substr($key, 0, 1))) {
$parameters[$key] = $value;
}
}
$url = Url::factory($request->getPath());
$url->setQuery($parameters);
Но я изменил следующим образом:
$parameters = $request->getQuery();
Моя строка выше переопределит итерацию, чтобы установить что-то в $params
, По крайней мере, я могу получить доступ к строкам запроса