Метод validate
Метод validate класса Controller предназначен для автоматической валидации данных запроса. Он доступен в любом контроллере, наследующем базовый класс Controller. Первым параметром передаётся объект запроса, вторым - массив правил валидации, третьим - массив пользовательских сообщений об ошибках. В случае успешной валидации метод возвращает массив проверенных данных.
Синтаксис
<?php
$this->validate($request, $rules, $messages);
?>
Пример
Давайте провалидируем данные при создании статьи:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function store(Request $request)
{
$rules = [
'title' => 'required|string|max:255',
'content' => 'required|string',
'status' => 'in:draft,published'
];
$validated = $this->validate($request, $rules);
$article = Article::create($validated);
return redirect('/articles')->with('success', 'Article created');
}
}
?>
Пример
Валидация с пользовательскими сообщениями об ошибках:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$rules = [
'name' => 'required|string|min:2',
'email' => 'required|email|unique:users,email,' . $id,
'age' => 'integer|min:18|max:120'
];
$messages = [
'name.required' => 'Name is required',
'name.min' => 'Name must be at least 2 characters',
'email.unique' => 'This email is already taken',
'age.min' => 'You must be at least 18 years old'
];
$validated = $this->validate($request, $rules, $messages);
$user = User::find($id);
$user->update($validated);
return response()->json(['message' => 'User updated successfully']);
}
}
?>
Результат выполнения кода при успешной валидации:
[
"message" => "User updated successfully"
]
Пример
Использование метода валидации с дополнительными условиями:
<?php
namespace App\Http\Controllers;
use App\Models\Order;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function store(Request $request)
{
$validated = $this->validate($request, [
'product_id' => 'required|exists:products,id',
'quantity' => 'required|integer|min:1',
'price' => 'required|numeric|min:0.01',
'delivery_date' => 'required|date|after:today',
'notes' => 'nullable|string|max:500'
]);
$order = Order::create($validated);
return view('orders.show', ['order' => $order]);
}
}
?>
Смотрите также
-
метод
validateкласса Request,
который выполняет валидацию данных запроса напрямую -
метод
middlewareкласса Controller,
который позволяет назначать посредники для контроллеров -
метод
authorizeкласса Controller,
который используется для проверки прав пользователя -
класс
JsonResponse,
который используется для возврата JSON-ответов из контроллеров