Проверка Laravel не показывает мне ошибок в представлении

#laravel #validation

#laravel #проверка

Вопрос:

У меня это есть в контроллере…

 public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'category_id' => 'required',
        'description' => 'required',
        'price' => 'required',
        'long_description' => 'required'
    ]);

    $product = new Product();
    foreach ($request->all() as $key => $value) {
        if ($key !== '_token') $product->$key = $value;
    }
    $product->save();

    return redirect('/admin/products');
}
  

И это в представлении…

 @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{‌{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
  

Форма без проверки работает идеально. Но я не понимаю, почему он не показывает мне ошибки в представлении при перенаправлении.

Комментарии:

1. какую версию laravel вы используете в настоящее время

2. Не имеет отношения к вашему вопросу, но повторение $errors->all() и добавление свойств — плохая идея и позволяет пользователям устанавливать ЛЮБОЕ свойство в вашей модели (и потенциально вызывать ошибки), даже если вы не хотите, чтобы они его редактировали. Вместо этого используйте Product::create($request->all()); и установите $fillable свойство модели в белый список свойств, которые могут быть установлены пользователем.

3. Я использую Laravel версии 5.7.

4. Благодаря двум, к счастью, это было решено 😉

Ответ №1:

Вам нужно сделать что-то вроде этого-

 public function store(Request $request)
{
    $request->validate($request, [
        'name' => 'required',
        'category_id' => 'required',
        'description' => 'required',
        'price' => 'required',
        'long_description' => 'required'
    ]);

    if (!$validator->fails()) {
        $product = new Product();
        foreach ($request->all() as $key => $value) {
            if ($key !== '_token') $product->$key = $value;
        }
        $product->save();

        return redirect('/admin/products');
    } else {
        Session::flash('errors', $validator->messages());

        return redirect()->back()->withInput();
    }
}
  

Я внес два изменения в ваш код-

  1. Добавлен метод validate для $request вместо $ this.
  2. Добавлена проверка на неудачную проверку и отправлены эти ошибки через сеанс.

Ответ №2:

Я уже решил. Проблема заключалась в том, что у меня был маршрут post внутри api.php. Переместив его в web.php это работает.