Маршрут Laravel как обратный вызов API: Как избежать ошибки "Содержимое ответа должно быть строкой или объектом"?
В моем приложении Laravel 5.2 я использую CloudConvert для преобразования моих файлов. Я реализовал асинхронное преобразование, которое требует публичного URL обратного вызова для моего сайта. Как это:
public function upload(Request $request) {
// Store uploaded file...
CloudConvert::file(/* path to the file */)
->callback(action('UploadController@saveFileFromProcess'))
->convert('pdf');
}
И обратный звонок:
public function saveFileFromProcess() {
try {
CloudConvert::useProcess($request->input('url'))
->save(/* path to file storage */);
} catch (\Exception $e) {
Log::error($e->getMessage());
return false;
}
return true;
}
Теперь конвертация работает просто отлично. Но я вижу в журналах, что Laravel выдает ошибку после того, как преобразование выполнено:
Содержимое Ответа должно быть строкой или объектом, реализующим __toString(), с заданным логическим значением.
Я понимаю, что это потому, что маршрут вызывается и возвращается true
или же false
вместо, например, рендеринга вида.
Что мне тогда вернуть, чтобы избежать ошибки? Достаточно ли строки? Есть ли что-то конкретное, что я могу вернуть для такого звонка?
А что, если я все еще хочу остановить сценарий, когда, например, конкретные Request
вход отсутствует?
1 ответ
Вы можете вернуть массив с ответом, например return ['status' => true];
, который автоматически преобразуется в JSON, и вы можете использовать его, если получите доступ к этому маршруту с помощью AJAX.