Правило before_or_equal
Правило before_or_equal проверяет, что значение поля является корректной датой
и временем и предшествует или равно указанной дате. Оно используется в
валидации форм, когда необходимо убедиться, что дата не позже заданной.
Правило может сравнивать поле с конкретной датой, с другим полем формы
или с текущим временем через ключевое слово today.
Синтаксис
Базовый синтаксис правила:
<?php
'field' => 'before_or_equal:date'
?>
Где 'field' - имя проверяемого поля, а 'date' -
строка с датой, которая используется для сравнения. Дата должна быть
в формате, поддерживаемом функцией strtotime PHP,
либо ключевым словом today.
Пример с конкретной датой
Давайте проверим, что дата события не позже 31 декабря 2025 года:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$request = new Request([
'event_date' => '2025-12-30'
]);
$validator = Validator::make($request->all(), [
'event_date' => 'required|date|before_or_equal:2025-12-31'
]);
if ($validator->passes()) {
echo "Validation passed";
} else {
$res = $validator->errors()->all();
echo $res[0];
}
?>
Результат выполнения кода:
"Validation passed"
Пример с полем формы
Проверим, что дата начала не позже даты окончания:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$request = new Request([
'start_date' => '2025-12-30',
'end_date' => '2025-12-31'
]);
$validator = Validator::make($request->all(), [
'start_date' => 'required|date|before_or_equal:end_date'
]);
if ($validator->passes()) {
echo "Validation passed";
} else {
$res = $validator->errors()->all();
echo $res[0];
}
?>
Результат выполнения кода:
"Validation passed"
Пример с текущей датой
Проверим, что дата регистрации не позже текущего дня:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$request = new Request([
'registration_date' => date('Y-m-d')
]);
$validator = Validator::make($request->all(), [
'registration_date' => 'required|date|before_or_equal:today'
]);
if ($validator->passes()) {
echo "Validation passed";
} else {
$res = $validator->errors()->all();
echo $res[0];
}
?>
Результат выполнения кода:
"Validation passed"
Пример с использованием Form Request
Создадим класс запроса для валидации даты события:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class EventRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'required|string|max:255',
'event_date' => 'required|date|before_or_equal:end_date',
'end_date' => 'required|date',
];
}
public function messages(): array
{
return [
'event_date.before_or_equal' => 'The event date must be before or equal to the end date.',
];
}
}
?>
Теперь используем этот запрос в контроллере:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\EventRequest;
class EventController extends Controller
{
public function store(EventRequest $request)
{
$validated = $request->validated();
echo "Event created successfully";
return $validated;
}
}
?>
Смотрите также
-
правило
before,
которое проверяет, что дата строго раньше указанной -
правило
after,
которое проверяет, что дата строго позже указанной -
правило
after_or_equal,
которое проверяет, что дата позже или равна указанной -
правило
date,
которое проверяет, что значение является корректной датой