Маршрут 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.

Другие вопросы по тегам