Пользовательский валидатор Laravel 6 всегда возвращает JSON
Я всегда использовал в своих формах Ajax для выполнения CRUD, но теперь мне нужно было создать форму, которая регулярно публикуется без Ajax.
Пару часов меня поражает то, что обычай PostsRequest::class
все же работает хорошо, и вот моя проблема, когда проверка не выполняется, она повторяет сообщение JSON. Мне нужно фиксировать ошибки старомодным способом, например:
@error('title')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
но я получаю, что браузер отображает:
{
"message": "Please correct the errors.",
"errors": {
"title": [
"The title must be between 15 and 16 characters."
]
}
}
Метод store() в моем контроллере:
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Frontend\ReviewsRequest $request
* @param \App\Models\Review $review
*
* @return \Illuminate\Http\Response
* @since 2.2.0
*/
public function store(ReviewsRequest $request, Review $review)
{
try {
\DB::beginTransaction();
$data = $request->all();
$data['active'] = 0;
$data['approved'] = 0;
$review = $review->create($data);
// sync user reviews
$review->users()->sync(auth()->id(), $review->id);
// sync internal reviews
if($request->get('type') == 'internals') {
$review->internals()->sync(1, $review->id);
}
// sync internal reviews
if($request->get('type') == 'firm') {
$review->firms()->sync(120, $review->id);
}
\DB::commit();
return view('frontend.reviews.review_thank_you');
} catch(Exception $e) {
echo $e->getMessage();
} finally {
}
}
Я искал почти везде, документацию, здесь, в Stackru, в Интернете и т. Д., И все, что я нашел, - это люди, желающие получить ответ JSON.
В моем PostsRequest
класс, я, как обычно, установил public function rules(){ ... }
и public function messages( ... )
Что я делаю не так? Спасибо за любую помощь с этим довольно глупым вопросом.
1 ответ
Хорошо,
РЕШЕНО.
После нескольких часов копания в коде и отслеживания каждого шага процесса проверки я наконец нашел причину такого поведения.
В моем классе App\Exceptions\Handler
в render()
имеет следующее переопределение:
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Exception
*/
public function render($request, Exception $exception)
{
// THIS IS WHERE THE 'BLACK MAGIC' WAS HAPPENING <----
if ($exception instanceof ValidationException){
return response()->json([
'message' =>'Please correct the errors.',
'errors' => $exception->validator->getMessageBag()], 422);
}
return parent::render($request, $exception);
}
Иногда нам нужно сделать перерыв в 20-часовом рабочем графике, чтобы освежить и перезагрузить мозг...
Спасибо всем, кто попытался разобраться в этом вопросе. Если кто-то столкнется с подобной проблемой, изучите логику своих методов App\Exceptions\Handler::class.