Laravel 6 пользовательский валидатор всегда возвращает JSON - PullRequest
0 голосов
/ 11 апреля 2020

Я всегда использовал в своих формах 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 {
    }
}

Я искал почти везде документацию, здесь, в StackOverflow, в Интернете и т. д. c, и все, что я нахожу, это люди, которые хотят получить ответ JSON.

В моем классе PostsRequest я, как обычно, установил public function rules(){ ... } и public function messages( ... )

Что я могу делать не так? Спасибо за любую помощь в этом довольно глупом вопросе.

1 Ответ

0 голосов
/ 12 апреля 2020

Ну,

РЕШЕНО.

После нескольких часов копания в коде и выполнения каждого шага процесса проверки я наконец нашел причину такого поведения.

В моем классе 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-часовом рабочем графике, чтобы обновить sh и перезагрузить мозг .. .

Спасибо всем, кто пытался разобраться в этом вопросе. Если кто-то столкнулся с такой проблемой, загляните в App \ Exceptions \ Handler :: class методы 'logi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...