Правило date_format
Правило date_format используется в валидации Laravel для проверки того, что переданное значение соответствует заданному формату даты и времени. Это правило особенно полезно, когда требуется принимать дату в определенном формате от клиентской части приложения. Первым и единственным параметром передается строка формата, совместимая с функцией PHP date_parse_from_format.
Синтаксис
<?php
'field_name' => 'date_format:format'
?>
Где format - строка формата, например, 'Y-m-d' для даты в формате '2024-12-25', или 'd.m.Y' для формата '25.12.2024'.
Пример с использованием правила в контроллере
Давайте проверим, что поле 'date_from' имеет формат 'Y-m-d', а поле 'date_to' - формат 'd.m.Y':
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class EventController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'date_from' => 'date_format:Y-m-d',
'date_to' => 'date_format:d.m.Y',
]);
// $validated contains validated data
return $validated;
}
}
?>
Пример с передачей корректных данных
Отправим запрос с корректными значениями полей:
<?php
// Request data:
// date_from = '2024-12-25'
// date_to = '25.12.2024'
$res = $request->validate([
'date_from' => 'date_format:Y-m-d',
'date_to' => 'date_format:d.m.Y',
]);
print_r($res);
?>
Результат выполнения кода:
[
"date_from" => "2024-12-25",
"date_to" => "25.12.2024"
]
Пример с передачей некорректных данных
Отправим запрос с датой в неверном формате:
<?php
// Request data:
// date_from = '25.12.2024'
// date_to = '2024-12-25'
try {
$res = $request->validate([
'date_from' => 'date_format:Y-m-d',
'date_to' => 'date_format:d.m.Y',
]);
print_r($res);
} catch (IlluminateValidationValidationException $e) {
echo $e->getMessage();
}
?>
Результат выполнения кода:
"The date from does not match the format Y-m-d. (and 1 more error)"
Пример с несколькими допустимыми форматами
Иногда требуется принять дату в одном из нескольких возможных форматов. Это можно сделать, передав правило date_format с каждым форматом:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class EventController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'event_date' => 'date_format:Y-m-d|date_format:d.m.Y|date_format:m/d/Y',
]);
// $validated contains validated data
return $validated;
}
}
?>
Пример с использованием после валидации
Правило date_format часто используется вместе с правилом after для проверки, что одна дата следует за другой:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class PeriodController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'start_date' => 'date_format:Y-m-d|after:2024-01-01',
'end_date' => 'date_format:Y-m-d|after:start_date',
]);
// $validated contains validated data
return $validated;
}
}
?>
Пример с использованием правила в FormRequest
Для лучшей организации кода правило date_format может быть вынесено в отдельный класс запроса:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class EventRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'event_date' => 'date_format:Y-m-d H:i:s',
'event_end_date' => 'date_format:d.m.Y',
];
}
public function messages()
{
return [
'event_date.date_format' => 'Дата события должна быть в формате Y-m-d H:i:s',
'event_end_date.date_format' => 'Дата окончания должна быть в формате d.m.Y',
];
}
}
?>
Смотрите также
-
правило
date,
которое проверяет, является ли значение корректной датой -
правило
after,
которое проверяет, что дата идет после указанной даты -
правило
before,
которое проверяет, что дата идет до указанной даты -
класс
FormRequest,
который используется для создания классов запросов с валидацией