Heim  >  Fragen und Antworten  >  Hauptteil

Aufruf der undefinierten Methode GuzzleHttp\Command\Result::getBody()

<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>
P粉426780515P粉426780515387 Tage vor481

Antworte allen(1)Ich werde antworten

  • P粉231079976

    P粉2310799762023-08-30 18:59:05

    正如 @bwaindwain 提到的 toArray() 方法代替 getBody() 起作用。

    toArray() 方法适用于以下格式的响应:

    [
        {
          "token": "4354iojegdjss"
        }
    ]

    但是,使用这种响应格式,所有键仍然消失:

    {
          "token": "4354iojegdjss"
     }

    我对此问题的解决方法是在 src/api/resources/posts.json 中手动添加 responseModel,如下所示:

    {
      "operations": {
        "GetToken": {
          "httpMethod": "POST",
          "uri": "token",
          "summary": "Get token",
          },
          "responseModel": "Token"
      }
    }
    
     "models": {
        "Token": {
          "type": "object",
          "location": "json",
          "properties": {
            "token": {
              "location": "json",
              "type": "string"
            }
           }
        }
     }

    如果有人知道更好的解决方案,请发表评论。

    Antwort
    0
  • StornierenAntwort