Невозможно получить доступ к частному свойству объекта PHP - PullRequest
0 голосов
/ 11 июля 2019

В настоящее время я работаю с веб-сокетом Ratchet, и когда я пытаюсь распечатать соединение, я получаю этот объект и хочу получить поле uri->query, но когда я пытаюсь это сделать, это выдает ошибку, к которой я не могу получить доступ Частная собственность.

Мой код:

GuzzleHttp\Psr7\Request {#772
  -method: "GET"
  -requestTarget: null
  -uri: GuzzleHttp\Psr7\Uri {#773
    -scheme: "http"
    -userInfo: ""
    -host: "localhost"
    -port: 8090
    -path: "/"
    -query: "id=3"
    -fragment: ""
  }
    "Pragma" => array:1 [
      0 => "no-cache"
    ]
    "Cache-Control" => array:1 [
      0 => "no-cache"
    ]
    "Upgrade" => array:1 [
      0 => "websocket"
    ]
    "Origin" => array:1 [
      0 => "http://127.0.0.1:8000"
    ]
    "Sec-WebSocket-Version" => array:1 [
      0 => "13"
    ]
    "User-Agent" => array:1 [
      0 => "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    ]
    "Accept-Encoding" => array:1 [
      0 => "gzip, deflate, br"
    ]
    "Accept-Language" => array:1 [
      0 => "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,hy;q=0.6"
    ]
    "Sec-WebSocket-Key" => array:1 [
      0 => "apMgrSRt1GBHX5Nhj19gHQ=="
    ]
    "Sec-WebSocket-Extensions" => array:1 [
      0 => "permessage-deflate; client_max_window_bits"
    ]
  ]
  -protocol: "1.1"
  -stream: null
}

И это ошибка, которую я получаю:

Symfony\Component\Debug\Exception\FatalThrowableError  : Cannot access private property GuzzleHttp\Psr7\Request::$uri

  at C:\xampp\htdocs\laravel_\my_project\app\Http\Controllers\WebSocketController.php:34
    30|
    31|     public function onOpen(ConnectionInterface $conn)
    32|     {
    33|
  > 34|         dd($conn->httpRequest->uri);
    35|
    36|         $this->clients->attach($conn);
    37|         $this->users[$conn->resourceId] = $conn;
    38|     }

  Exception trace:

  1   App\Http\Controllers\WebSocketController::onOpen(Object(Ratchet\WebSocket\WsConnection))
      C:\xampp\htdocs\laravel_\my_project\vendor\cboden\ratchet\src\Ratchet\WebSocket\WsServer.php:142

  2   Ratchet\WebSocket\WsServer::onOpen(Object(Ratchet\Server\IoConnection), Object(GuzzleHttp\Psr7\Request))
      C:\xampp\htdocs\laravel_\my_project\vendor\cboden\ratchet\src\Ratchet\Http\HttpServer.php:51

Как взять значение поля query?

1 Ответ

1 голос
/ 11 июля 2019

Переменная является закрытой, поэтому вы не можете получить к ней доступ из-за пределов класса. (Читайте о переменная область действия )

Но в вашем случае вы используете объект HTTP-запроса Guzzle, так что doc говорит:

public getQuery ( mixed $asString = false )

Get the collection of key value pairs that will be used as the query string in the request

Так что вы можете просто использовать getQuery для получения запроса от объекта.

...