Правило DateTime
Правило DateTime вешается на поле формы
и проверяет, что переданное значение является
корректной датой и временем. Первым параметром
передаётся формат даты, которому должно
соответствовать значение. Если значение не
соответствует формату или не является датой,
валидация завершится ошибкой.
Синтаксис
new DateTime(format: 'Y-m-d H:i:s')
Пример
Давайте создадим форму с полем createdAt
и повесим на него правило DateTime:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsDateTime;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('createdAt', TextType::class, [
'constraints' => [
new DateTime(format: 'Y-m-d H:i:s'),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Если пользователь введёт значение '2024-01-15 10:30:00',
валидация пройдёт успешно.
Пример
Давайте проверим работу правила в контроллере и выведем результат валидации:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
return new Response('valid: ' . $data['createdAt']);
}
return new Response('invalid');
}
}
?>
Результат выполнения кода для корректной даты:
"valid: 2024-01-15 10:30:00"
Пример
Давайте передадим некорректное значение
'abcde' и посмотрим на результат:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $form->getErrors(true);
foreach ($errors as $error) {
return new Response($error->getMessage());
}
}
return new Response('no errors');
}
}
?>
Результат выполнения кода для некорректного значения:
"This value is not a valid datetime."
Смотрите также
-
правило
Date,
которое проверяет корректность даты -
правило
Time,
которое проверяет корректность времени -
поле
DateTimeType,
которое создаёт поле для ввода даты и времени -
метод
isValid,
который проверяет валидность формы