为什么 Symfony Not Null 约束会抛出 false 错误?
Why Symfony NotNull contraint throws an error for false?
我在处理 Symfony 表单验证中的 NotNull
约束时遇到了问题。
使用以下形式:
class SchedulableType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) {
$form = $event->getForm();
$form
->add('dateFrom', DateTimeType::class, array(
'constraints' => array(
new NotNull()
),
'widget' => 'single_text', // In order to manage format
'format' => 'y-MM-dd HH:mm:ss'
))
->add('dateTo', DateTimeType::class, array(
'constraints' => array(
new NotNull()
),
'widget' => 'single_text', // In order to manage format
'format' => 'y-MM-dd HH:mm:ss'
))
->add('value', $options['valueType'], $options['valueOptions']);
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'valueType' => null,
'valueOptions' => array(),
));
}
}
我的事件中的数据如下:
array (size=3)
'dateFrom' => boolean false
'dateTo' => boolean false
'value' => string 'value' (length=5)
但我收到以下错误消息:
{
"status": "400",
"title": "This value should not be null.",
"source": {
"source": {
"pointer": "/SCHEDULABLE/dateFrom/0"
}
}
},
{
"status": "400",
"title": "This value should not be null.",
"source": {
"source": {
"pointer": "/SCHEDULABLE/dateTo/0"
}
}
}
如果我的值为 false
,为什么 NotNull
约束会引发错误?
你可以看看约束 class : symfony/src/Symfony/Component/Validator/Constraints/NotNullValidator.php
PS : 在API中使用了表单验证,这就是错误格式为JSON的原因。
这基本上是因为这些字段是 DateTimeType
,所以它 tries to cast value to a valid \DateTime
并且因为它无论如何都不会发生,所以它存储了一个 null
值。
记住循环是
- 数据处理
- 通过 setter/adder/public 属性填充对象(或表单)
- 验证(事实上,您要通过
isValid()
对此负责)
如果您想接受 false
并实现某种类似 "set today date" 的逻辑,您需要自己动手(也许使用 FormEvents?)
我在处理 Symfony 表单验证中的 NotNull
约束时遇到了问题。
使用以下形式:
class SchedulableType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) {
$form = $event->getForm();
$form
->add('dateFrom', DateTimeType::class, array(
'constraints' => array(
new NotNull()
),
'widget' => 'single_text', // In order to manage format
'format' => 'y-MM-dd HH:mm:ss'
))
->add('dateTo', DateTimeType::class, array(
'constraints' => array(
new NotNull()
),
'widget' => 'single_text', // In order to manage format
'format' => 'y-MM-dd HH:mm:ss'
))
->add('value', $options['valueType'], $options['valueOptions']);
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'valueType' => null,
'valueOptions' => array(),
));
}
}
我的事件中的数据如下:
array (size=3)
'dateFrom' => boolean false
'dateTo' => boolean false
'value' => string 'value' (length=5)
但我收到以下错误消息:
{
"status": "400",
"title": "This value should not be null.",
"source": {
"source": {
"pointer": "/SCHEDULABLE/dateFrom/0"
}
}
},
{
"status": "400",
"title": "This value should not be null.",
"source": {
"source": {
"pointer": "/SCHEDULABLE/dateTo/0"
}
}
}
如果我的值为 false
,为什么 NotNull
约束会引发错误?
你可以看看约束 class : symfony/src/Symfony/Component/Validator/Constraints/NotNullValidator.php
PS : 在API中使用了表单验证,这就是错误格式为JSON的原因。
这基本上是因为这些字段是 DateTimeType
,所以它 tries to cast value to a valid \DateTime
并且因为它无论如何都不会发生,所以它存储了一个 null
值。
记住循环是
- 数据处理
- 通过 setter/adder/public 属性填充对象(或表单)
- 验证(事实上,您要通过
isValid()
对此负责)
如果您想接受 false
并实现某种类似 "set today date" 的逻辑,您需要自己动手(也许使用 FormEvents?)