Правило nullable
Правило nullable используется в валидации для указания, что поле может отсутствовать в запросе или содержать значение null. Это полезно, когда поле формы не является обязательным, но может быть заполнено. Если поле присутствует в запросе, применяются остальные правила валидации. Если поле отсутствует или передано как null, другие правила игнорируются.
Синтаксис
<?php
use Illuminate\Validation\Rule;
$rules = [
'field' => 'nullable|string|max:255'
];
?>
Пример
Давайте создадим валидацию для формы обновления профиля пользователя, где поле 'bio' не обязательно:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ProfileController extends Controller
{
public function update(Request $request)
{
$validator = Validator::make($request->all(), [
'bio' => 'nullable|string|max:500'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
return response()->json(['message' => 'Profile updated']);
}
}
?>
Пример
Рассмотрим работу правила nullable на примере валидации поста:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string|max:255',
'content' => 'required|string',
'image' => 'nullable|image|max:2048',
'category_id' => 'nullable|integer|exists:categories,id'
]);
if ($validator->fails()) {
return back()->withErrors($validator);
}
// ... save post logic
return redirect('/posts');
}
}
?>
Пример
Использование nullable с sometimes для динамической валидации:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'email' => 'sometimes|nullable|email|unique:users,email,' . $id,
'phone' => 'nullable|string|regex:/^[0-9]{10}$/',
'website' => 'nullable|url|max:255'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
return response()->json(['message' => 'User updated']);
}
}
?>
Пример
Использование nullable в правилах валидации массива:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ProjectController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:100',
'description' => 'nullable|string|max:1000',
'start_date' => 'nullable|date|after:today',
'end_date' => 'nullable|date|after:start_date',
'tags' => 'nullable|array|max:5',
'tags.*' => 'string|max:20'
]);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
$res = $validator->validated();
return response()->json($res);
}
}
?>
Результат выполнения кода при запросе без необязательных полей:
{"name": "My Project"}
Результат выполнения кода при запросе с необязательными полями:
{"name": "My Project", "description": "Awesome project", "tags": ["php", "laravel"]}