2015-12-03 3 views
1

Я использую Gazzle 6 с Laravel 5.1, и у меня странное поведение, возвращающее мои данные из API, которые я использую. Это мой код:Laravel 5.1: Ответ возврата Gzzle 6 не работает

$data = array(
    'id' => '112233' 
); 

$from = \Carbon\Carbon::now()->subDays(1)->format('d/m/Y'); 
$to = \Carbon\Carbon::now()->subMonths(1)->format('d/m/Y'); 

$first_report = $this->client->post('https://my.service.com/reporting/execute/', [ 
    'auth' => ['[email protected]', 'mypassword'], 
    'form_params' => ['data' => json_encode($data)] 
]); 



$second_report = $this->client->get('mysecondservice.com/reports', [ 
    'query' => [ 
     'account_auth_token' => '000011122223333444455556667778889999', 
     'start_date' => $to, 
     'end_date' => $from 
    ] 
]); 

return array(
    'first_report' => $first_report, 
    'second_report' => $second_report 
); 

Если я вернуть данные в виде массива, как и предыдущий first_report и second_report пусты. Но если я вернусь только, например

return $first_report; 

или

return $second_report; 

Данные правильно возвращаемый для каждого отчета, но я не знаю, что это вопрос там, потому что я попытался с: json_encode или даже return $ response() -> json ..., но все еще не работает.

Вы когда-нибудь предполагали, что происходит?

+0

Что делает 'echo gettype ($ first_report);' дает вам? –

+0

Оба являются объектами. – SoldierCorp

ответ

0

Я думаю, вам нужно запустить send() функцию на объект, который вы должны получить ответ, а затем запустить getBody() на том, что, чтобы получить объект ответа, а затем запустить getContents() на то, чтобы получить содержимое ответа в виде строки. Таким образом, в общей сложности это будет выглядеть

$first_report = $this->client->post('https://my.service.com/reporting/execute/', [ 
'auth' => ['[email protected]', 'mypassword'], 
'form_params' => ['data' => json_encode($data)] 
])->send()->getBody()->getContents(); 



$second_report = $this->client->get('mysecondservice.com/reports', [ 
'query' => [ 
    'account_auth_token' => '000011122223333444455556667778889999', 
    'start_date' => $to, 
    'end_date' => $from 
] 
])->send()->getBody()->getContents(); 

я найти в документации жрать не совпадает с реальными методами, которые я использую, чтобы получить результаты. Не уверен, что он устарел, или если я делаю это неправильно, но этот метод работает для меня.

+0

Я только что нашел правильную функцию, которая: -> getBody() -> getContents(), потому что -> send() -> getBody (true); не работает. – SoldierCorp

+0

Рад, что у вас это работает! Согласно документам getBody() возвращает объект body, тогда как getBody (true) возвращает строку с содержимым тела. – Jeff

+0

Да, спасибо! Вы должны обновить свой ответ, используя метод, который я использовал, чтобы другие пользователи с одинаковой проблемой могли видеть правильный. – SoldierCorp