Метод when
Метод when класса Rule позволяет условно применять правила валидации. Первым параметром передаётся условие, вторым - колбэк, в который передаётся объект правил. Если условие истинно, применяются правила из колбэка. Если ложно - правила игнорируются. Метод возвращает объект правила для цепочки вызовов.
Синтаксис
<?php
use Illuminate\Validation\Rule;
Rule::when($condition, function ($rule) {
$rule->required();
$rule->min(5);
});
?>
Пример
Валидация поля 'content' только если поле 'status' равно 'draft':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'status' => 'required|string',
'content' => Rule::when(
$request->input('status') === 'draft',
function ($rule) {
$rule->required()->string()->min(10);
}
),
]);
echo "Validation passed";
}
}
?>
Результат выполнения кода при статусе 'draft' и длине текста 15 символов:
"Validation passed"
Пример
Использование when с методом unique для проверки уникальности email только при изменении:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Models\User;
class UserController extends Controller
{
public function update(Request $request, User $user)
{
$validated = $request->validate([
'email' => Rule::when(
$request->input('email') !== $user->email,
function ($rule) use ($user) {
$rule->required()->email()->unique('users', 'email', $user->id);
}
),
'name' => 'required|string|max:255',
]);
echo "User updated successfully";
}
}
?>
Результат выполнения кода при изменении email на уникальный:
"User updated successfully"
Пример
Условное применение нескольких правил в зависимости от типа пользователя:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class ProfileController extends Controller
{
public function store(Request $request)
{
$userType = $request->input('user_type');
$validated = $request->validate([
'user_type' => 'required|string',
'company_name' => Rule::when(
$userType === 'business',
function ($rule) {
$rule->required()->string()->max(100);
}
),
'birth_date' => Rule::when(
$userType === 'individual',
function ($rule) {
$rule->required()->date()->before('today');
}
),
]);
echo "Profile saved";
}
}
?>
Результат выполнения кода для пользователя типа 'business':
"Profile saved"
Смотрите также
-
метод
requiredIf,
который делает поле обязательным при выполнении условия -
метод
unique,
который проверяет уникальность значения в таблице -
метод
required_with,
который требует наличия поля при заполнении другого -
метод
sometimes,
который применяет правила только если поле присутствует