Aufruf der undefinierten Methode GuzzleHttp\Command\Result::getBody()
P粉426780515
2023-08-29 22:08:59
<p>Ich versuche, eine Antwort im JSON-Format von einer externen API in Drupal zu erhalten. Ich verwende das Drupal-Modul HTTP Client Manager.
Jetzt kann ich die Antwort nur noch im stdClass-Objektformat in einem Array abrufen und alle Antwortschlüsselwerte gehen verloren. </p>
<p>Mein ursprünglicher Code: </p>
<pre class="brush:php;toolbar:false;">public function findPosts() {
$client = $this->getClient();
$params = array('client_Id' => "12345",
"client_Secret" =>
"scope =>
$response = $client->FindPosts($params);
dpm($response);
return ['#markup' => $response];
}</pre>
<p>Geben Sie den folgenden Code aus. Außerdem muss es so aussehen: [access_token] => eyJhbGciOiJIUzUxMiIsIn, [type] => bearer usw. </p>
<pre class="brush:php;toolbar:false;">stdClass-Objekt
(
[__CLASS__] => GuzzleHttpCommandResult
[data:protected] => Array
(
[0] =>eyJhbGciOiJIUzUxMiIsIn
[1] =>
[2] =>
[3] => 2022-11-09T10:48:47+00:00
[4] => lesen
[5] => MwA1ADkAZAA0AGIAZAA4AC0AOQAzADcA
[6] =>
[7] => 2022-11-10T09:48:47+00:00
)
)</pre>
<p>Wenn ich $response->getBody() oder $response->getContent() oder eine andere Antwortmethode versuche, wird der folgende Fehler zurückgegeben.</p>
<pre class="brush:php;toolbar:false;">Fehler: Aufruf der undefinierten Methode GuzzleHttpCommandResult::getBody() in Drupalhttp_client_manager_exampleControllerExampleController->findPosts() (Zeile 92 von module/contrib/http_client_manager/modules/http_client_manager_example /src/Controller/ExampleController.php).
Drupalhttp_client_manager_exampleControllerExampleController->findPosts()
call_user_func_array(Array, Array) (Zeile: 123)
DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->DrupalCoreEventSubscriber{closure}() (Zeile: 564)
DrupalCoreRenderRenderer->executeInRenderContext(Object, Object) (Zeile: 124)
DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Zeile: 97)
DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->DrupalCoreEventSubscriber{closure}() (Zeile: 169)
SymfonyComponentHttpKernelHttpKernel->handleRaw(Object, 1) (Zeile: 81)
SymfonyComponentHttpKernelHttpKernel->handle(Object, 1, 1) (Zeile: 58)
DrupalCoreStackMiddlewareSession->handle(Object, 1, 1) (Zeile: 48)
DrupalCoreStackMiddlewareKernelPreHandle->handle(Object, 1, 1) (Zeile: 106)
Drupalpage_cacheStackMiddlewarePageCache->pass(Object, 1, 1) (Zeile: 85)
Drupalpage_cacheStackMiddlewarePageCache->handle(Object, 1, 1) (Zeile: 49)
Asm89StackCors->handle(Object, 1, 1) (Zeile: 48)
DrupalCoreStackMiddlewareReverseProxyMiddleware->handle(Object, 1, 1) (Zeile: 38)
DrupalwebprofilerStackMiddlewareWebprofilerMiddleware->handle(Object, 1, 1) (Zeile: 51)
DrupalCoreStackMiddlewareNegotiationMiddleware->handle(Object, 1, 1) (Zeile: 23)
StackStackedHttpKernel->handle(Object, 1, 1) (Zeile: 709)
DrupalCoreDrupalKernel->handle(Object) (Zeile: 19)</pre></p>
正如 @bwaindwain 提到的
toArray()
方法代替getBody()
起作用。toArray()
方法适用于以下格式的响应:但是,使用这种响应格式,所有键仍然消失:
我对此问题的解决方法是在
src/api/resources/posts.json
中手动添加responseModel
,如下所示:如果有人知道更好的解决方案,请发表评论。