Правило filled
Правило filled используется в валидации для проверки,
что поле присутствует в запросе и не является пустым.
В отличие от правила required, правило filled
проверяет поле только в том случае, если оно присутствует
в запросе. Если поле отсутствует, валидация считается успешной.
Если поле присутствует, оно не должно быть пустым.
Правило filled полезно в ситуациях, когда нужно
проверить переданные поля на заполненность, но не требовать
их обязательного присутствия. Например, при обновлении профиля
пользователь может изменить только те поля, которые считает нужным.
Синтаксис
<?php
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
$validator = Validator::make($request->all(), [
'field_name' => 'filled'
]);
?>
Пример
Давайте создадим валидацию для обновления профиля пользователя,
где поле 'name' может быть не передано, но если передано,
то должно быть заполнено:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class ProfileController extends Controller
{
public function update(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'filled|string|max:255'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
return response()->json(['message' => 'Profile updated']);
}
}
?>
Результат выполнения кода при отсутствии поля 'name' в запросе:
{"message": "Profile updated"}
Результат выполнения кода при наличии пустого поля 'name':
{"name": ["The name field must be filled"]}
Пример
Давайте используем правило filled в классе
FormRequest для валидации данных обновления статьи:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class UpdateArticleRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'filled|string|max:255',
'content' => 'filled|string',
'status' => 'filled|string|in:draft,published'
];
}
}
?>
При передаче всех полей заполненными, валидация будет успешной.
Если передать поле 'title' со значением пустой строки,
валидация не пройдёт:
{"title": ["The title field must be filled"]}
Пример
Правило filled отлично работает с массивами.
Давайте проверим, что переданные элементы массива
не являются пустыми:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class PostController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'tags' => 'filled|array',
'tags.*' => 'filled|string|max:50'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
return response()->json(['message' => 'Success']);
}
}
?>
Результат выполнения кода при передаче массива с пустым элементом:
{"tags.0": ["The tags.0 field must be filled"]}