#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();
}
}
Я внес два изменения в ваш код-
- Добавлен метод validate для $request вместо $ this.
- Добавлена проверка на неудачную проверку и отправлены эти ошибки через сеанс.
Ответ №2:
Я уже решил. Проблема заключалась в том, что у меня был маршрут post внутри api.php. Переместив его в web.php это работает.