Правило missing
Правило missing применяется к полю в массиве входных данных и проверяет, что это поле полностью отсутствует в запросе. В отличие от правила nullable, которое позволяет полю быть пустым, или правила required, которое требует присутствия поля, правило missing требует, чтобы ключ поля вообще не передавался в запросе. Это особенно полезно при обновлении ресурсов, когда нужно различать отсутствие поля и отправку пустого значения.
Правило не принимает дополнительных параметров. Оно работает как на уровне отдельных полей, так и при валидации вложенных структур данных. Если поле присутствует в запросе (даже с пустым значением), валидация будет провалена.
Синтаксис
<?php
use Illuminate\Validation\Rule;
$rules = [
'field_name' => 'missing',
];
?>
Правило также можно использовать через класс Rule:
<?php
use Illuminate\Validation\Rule;
$rules = [
'field_name' => [Rule::missing()],
];
?>
Пример
Давайте создадим валидацию для обновления профиля пользователя, где поле 'password' должно отсутствовать в запросе, если пароль не меняется:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateProfileRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'password' => 'missing',
];
}
}
?>
Пример
Давайте используем правило missing с вложенным полем в контроллере:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function update(Request $request)
{
$validator = Validator::make($request->all(), [
'user_id' => 'required|integer',
'user.role' => 'missing',
'user.department' => 'string|nullable',
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
return response()->json([
'message' => 'User updated successfully'
]);
}
}
?>
Результат выполнения при отправке запроса без поля 'user.role':
"User updated successfully"
Если же отправить запрос с полем 'user.role', даже с пустым значением, валидация не пройдёт.
Пример
Давайте создадим более сложную валидацию, где правило missing используется вместе с другими правилами:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class PostRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'title' => 'required|string|max:255',
'content' => 'required|string',
'status' => ['required', Rule::in(['draft', 'published', 'archived'])],
'published_at' => ['missing', 'date'],
'author_id' => 'nullable|integer',
];
}
}
?>
В этом примере поле 'published_at' должно отсутствовать в запросе, но если оно всё же будет отправлено, то должно соответствовать формату даты. Это позволяет гибко управлять поведением валидации.