Я отправляю AJAX запросы Laravel 5.5 через jQuery.ajax(). jQuery.ajax().fail() возвращает коллбэку объект xhr, в котором находится вся инфа. В частности, ошибки валидации, если они есть, находятся в xhr.responseText. Laravel автоматически создаёт ответ в JSON и заполняет всё это, но теперь мне понадобилось добавить свою ошибку (не относящуюся к валидации) в responseText. Как это сделать в контроллере Laravel?
Пример кода:
function tryToAddComment(form) {
Modifiers.addWaiting(form);
let formData = new FormData(form);
$.ajax({
url: $(form).attr('action'),
type: 'POST',
data: formData,
async: true,
success: function (data) {
// doing some work
},
cache: false,
contentType: false,
processData: false
}).fail(function (xhr, status, error) {
Modifiers.addFail(form);
showXhrErr(xhr, status, error);
Modifiers.removeWaitingFail(form);
});
}
function showXhrErr(xhr, status, error) {
alert(jsonErrorsToStr(xhr.responseText).trim()
|| 'Извините, произошла неизвестная ошибка (' + status + ', ' + error);
}
class CommentsController extends Controller
{
public function store(Request $request, Commentable $commentable)
{
$this->validate($request, static::getChecks());
// тут я хочу сделать пару проверок и добавить
// в случае необходимости в ответ ошибки
$comment = $commentable->addComment($request->all(), \Auth::user()->id);
$comment->number = count($commentable->comments);
if($request->ajax()) {
return view('common.comment', compact('comment'));
}
return back();
}