Метод fails
Метод fails применяется к экземпляру класса Validator
и позволяет определить, содержит ли валидация ошибки.
Метод возвращает логическое значение: true означает,
что валидация не пройдена и есть ошибки, false -
что все данные корректны. Обычно используется в условных
конструкциях для выполнения различных действий в зависимости
от результата валидации.
Синтаксис
<?php
$validator = Validator::make($data, $rules);
$res = $validator->fails();
?>
Пример
Давайте выполним валидацию данных и проверим, есть ли ошибки:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class UserController extends Controller
{
public function store(Request $request)
{
$data = $request->all();
$rules = [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'age' => 'required|integer|min:18'
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'errors' => $validator->errors()
], 422);
}
return response()->json([
'status' => 'success',
'message' => 'User created'
]);
}
}
?>
Результат выполнения кода при ошибках валидации:
{
"status": "error",
"errors": {
"email": ["The email has already been taken."],
"age": ["The age must be at least 18."]
}
}
Пример
Используем метод fails для проверки валидации
в контроллере с редиректом на предыдущую страницу:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class PostController extends Controller
{
public function create(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string|max:100',
'content' => 'required|string|min:10',
'category' => 'required|exists:categories,id'
]);
if ($validator->fails()) {
return redirect('posts/create')
->withErrors($validator)
->withInput();
}
// Save post...
return redirect('posts')->with('success', 'Post created');
}
}
?>
Пример
Используем метод fails для условной обработки
данных в зависимости от результата валидации:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class ProductController extends Controller
{
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'price' => 'required|numeric|min:0',
'stock' => 'required|integer|min:0',
'status' => 'required|in:active,inactive'
]);
if ($validator->fails()) {
// Логируем ошибки
Log::error('Product validation failed', [
'product_id' => $id,
'errors' => $validator->errors()->toArray()
]);
return back()->withErrors($validator);
}
// Обновляем продукт
$product = Product::find($id);
$product->update($validator->validated());
return redirect('products')->with('success', 'Product updated');
}
}
?>