未定義メソッド GuzzleHttp\Command\Result::getBody() の呼び出し
P粉426780515
2023-08-29 22:08:59
<p>Drupal の外部 API から JSON 形式で応答を取得しようとしています。 HTTP クライアント マネージャー Drupal モジュールを使用しています。
現在、配列内の stdClass オブジェクト形式でのみ応答を取得でき、すべての応答キー値が失われます。 </p>
<p>私の元のコード: </p>
<pre class="brush:php;toolbar:false;">public function findPosts() {
$client = $this->getClient();
$params = array('client_Id' => "12345",
"client_Secret" => "42452454",
"スコープ" => "読み取り");
$response = $client->FindPosts($params);
dpm($response);
return ['#markup' => $response];
}</pre>
<p>以下のコードを出力します。 [access_token] => eyJhbGciOiJIUzUxMiIsIn、[type] => bearer などのようにする必要もあります。 </p>
<pre class="brush:php;toolbar:false;">stdClass オブジェクト
(
[__CLASS__] => GuzzleHttp\Command\Result
[データ:保護されている] => 配列
(
[0] =>eyJhbGciOiJIUzUxMiIsIn
[1] => ベアラー
[2] => 3600
[3] => 2022-11-09T10:48:47 00:00
[4] => 読む
[5] => MwA1ADkaZAA0AGIAZAA4AC0AOQAzADcA
[6] => 86400
[7] => 2022-11-10T09:48:47 00:00
)
)</pre>
<p>$response->getBody() または $response->getContent() またはその他の応答メソッドを試行すると、次のエラーが返されます。</p>
<pre class="brush:php;toolbar:false;">エラー: Drupal\http_client_manager_example\Controller\ExampleController->findPosts() の未定義メソッド GuzzleHttp\Command\Result::getBody() の呼び出し (92 行目) modules/contrib/http_client_manager/modules/http_client_manager_example/src/Controller/ExampleController.php) の。
Drupal\http_client_manager_example\Controller\ExampleController->findPosts()
call_user_func_array(配列, 配列) (行: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (行: 564)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (行: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (行: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (行: 169)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(オブジェクト, 1) (行: 81)
Symfony\Component\HttpKernel\HttpKernel->ハンドル(オブジェクト, 1, 1) (行: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (行: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (行: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (行: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (行: 49)
Asm89\Stack\Cors->ハンドル(オブジェクト, 1, 1) (行: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (行: 38)
Drupal\webprofiler\StackMiddleware\WebprofilerMiddleware->ハンドル(オブジェクト, 1, 1) (行: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (行: 23)
Stack\StackedHttpKernel->ハンドル(オブジェクト, 1, 1) (行: 709)
Drupal\Core\DrupalKernel->handle(Object) (行: 19)<
@bwaindwain が述べたように、
toArray()
メソッドはgetBody()
の代わりに機能します。
リーリーtoArray()
このメソッドは、次の形式の応答を処理します:ただし、この応答形式では、依然としてすべてのキーが表示されません:
リーリーこの問題に対する私の解決策は、
より良い解決策を知っている人がいたら、コメントを残してください。responseModel
をsrc/api/resources/posts.json
に次のように手動で追加することでした。 リーリー