У меня есть API в котором нужно возвращать ошибки клиенту с помощью исключений. Например, клиент запросил несуществующий документ и приложение выбросило исключение:
public function actionGet($docId)
{
return (array) $this->findModel($docId);
}
protected function findModel($id)
{
if (($model = Doc::findOne($id)) !== null) {
return $model;
}
throw new NotFoundHttpException("Документ {$id} не найден");
}
В таком случаи, yii должен вернуть ответ следующего вида:
{
"success": false, // Успен/Не успех
"message": "Документ 10 не найден", //Текст из исключения
}
Вместо этого yii возвращает свой дефолтный вывод который меня не устраивает
{
"name":"Not Found",
"message":"Документ 10 не найден",
"code":0,
"status":404
}
Проблема в том, что я не могу найти способ как кастомизировать вывод исключений. Пытался использовать errorHandler, он даже не срабатывает. Как я понял - errorHandler не работает если Yii::$app->response->format установлен в yii\web\Response::FORMAT_JSON;.
Возможно вы спросите, зачем это нужно? Это просто удобно и уменьшает количество кода.
Продвижение своими сайтами как стратегия роста и независимости