Memanggil kaedah yang tidak ditentukan GuzzleHttp\Command\Result::getBody()
P粉426780515
P粉426780515 2023-08-29 22:08:59
0
1
545
<p>Saya cuba mendapatkan respons dalam format json daripada API luaran dalam Drupal. Saya menggunakan modul Drupal Pengurus Pelanggan HTTP. Sekarang saya hanya boleh mendapatkan respons dalam format objek stdClass dalam tatasusunan dan semua nilai kunci respons hilang. </p> <p>Kod asal saya: </p> <pre class="brush:php;toolbar:false;">public function findPosts() { $client = $this->getClient(); $params = array('client_Id' => "12345", "Rahsia_pelanggan" ="42452454", "skop" ="baca"; $respons = $client->FindPosts($params); dpm($respon); kembalikan ['#markup' => }</pre> <p>Keluarkan kod berikut. Saya juga memerlukannya untuk kelihatan seperti [access_token] => eyJhbGciOiJIUzUxMiIsIn, [type] => pembawa dll. </p> <pre class="brush:php;toolbar:false;">stdClass Object ( [__CLASS__] => GuzzleHttpCommandResult [data:protected] => Tatasusunan ( [0] =>eyJhbGciOiJIUzUxMiIsIn [1] => [2] => [3] => 2022-11-09T10:48:47+00:00 [4] => baca [5] => MwA1ADkAZAA0AGIAZA4AC0AOQAzADcA [6] => [7] => 2022-11-10T09:48:47+00:00 ) )</pra> <p>Apabila saya mencuba $response->getBody() atau $response->getContent() atau sebarang kaedah respons lain, ia mengembalikan ralat berikut.</p> <pre class="brush:php;toolbar:false;">Ralat: Panggilan ke kaedah yang tidak ditentukan GuzzleHttpCommandResult::getBody() dalam Drupalhttp_client_manager_exampleControllerExampleController->findPosts() (baris 92/modul_client_manager/clientamplemana /src/Controller/ExampleController.php). Drupalhttp_client_manager_exampleControllerExampleController->findPosts() call_user_func_array(Array, Array) (Barisan: 123) DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->DrupalCoreEventSubscriber{closure}() (Barisan: 564) DrupalCoreRenderRenderer->executeInRenderContext(Objek, Objek) (Baris: 124) DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Baris: 97) DrupalCoreEventSubscriberEarlyRenderingControllerWrapperSubscriber->DrupalCoreEventSubscriber{closure}() (Barisan: 169) SymfonyComponentHttpKernelHttpKernel->handleRaw(Objek, 1) (Barisan: 81) SymfonyComponentHttpKernelHttpKernel->handle(Objek, 1, 1) (Barisan: 58) DrupalCoreStackMiddlewareSession->handle(Objek, 1, 1) (Barisan: 48) DrupalCoreStackMiddlewareKernelPreHandle->handle(Objek, 1, 1) (Barisan: 106) Drupalpage_cacheStackMiddlewarePageCache->pass(Objek, 1, 1) (Baris: 85) Drupalpage_cacheStackMiddlewarePageCache->handle(Objek, 1, 1) (Barisan: 49) Asm89StackCors->handle(Objek, 1, 1) (Barisan: 48) DrupalCoreStackMiddlewareReverseProxyMiddleware->handle(Objek, 1, 1) (Barisan: 38) DrupalwebprofilerStackMiddlewareWebprofilerMiddleware->handle(Objek, 1, 1) (Barisan: 51) DrupalCoreStackMiddlewareNegotiationMiddleware->handle(Objek, 1, 1) (Barisan: 23) StackStackedHttpKernel->handle(Objek, 1, 1) (Barisan: 709) DrupalCoreDrupalKernel->handle(Objek) (Baris: 19)</pre></p>
P粉426780515
P粉426780515

membalas semua(1)
P粉231079976

Seperti yang @bwaindwain disebutkan toArray() 方法代替 getBody() berfungsi.

Kaedah

toArray() berfungsi dengan respons dalam format berikut:

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

Namun, dengan format respons ini, semua kunci masih hilang:

{
      "token": "4354iojegdjss"
 }

Penyelesaian saya untuk masalah ini adalah dalam src/api/resources/posts.json 中手动添加 responseModel seperti yang ditunjukkan di bawah:

{
  "operations": {
    "GetToken": {
      "httpMethod": "POST",
      "uri": "token",
      "summary": "Get token",
      },
      "responseModel": "Token"
  }
}

 "models": {
    "Token": {
      "type": "object",
      "location": "json",
      "properties": {
        "token": {
          "location": "json",
          "type": "string"
        }
       }
    }
 }

Jika sesiapa tahu penyelesaian yang lebih baik, sila tinggalkan komen.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan