我在 2.1.7 中的 Symfony 表单验证遇到了一些问题。
当我将数据绑定到表单时,我得到的所有错误都是“此值不应为空” - 我不知道哪里出错了?如果数据无效,似乎数据没有绑定到表单,但它没有给我预期的错误,而是将其视为空白。
即对于开始字段,我提交了一个字符串“这应该是一个日期”——我得到的错误是针对 NotBlank,而它应该是针对非日期的。
在逐步完成表单绑定过程时,我注意到以下内容:
当Form/Form.php
命中以下行时,日期的提交数据(它是一个字符串 - “2013-01-01”)被设置为一个空数组 - 一旦循环被命中,数组键显然没有设置,这就是问题似乎源于。
如果我将一个字段设置为一个 int,然后提交一个字符串,则该viewToNorm
方法会抛出一个错误,当捕获集合synchronized = false
并且 modelData 和 normData 未绑定时。
实体:
namespace HvH\DealsBundle\Entity;
class Deal
{
private $name;
private $start;
// getters and setters here...
}
验证:
# src/HvH/DealsBundle/Resources/config/validation.yml
HvH\DealsBundle\Entity\Deal:
properties:
name:
- NotBlank: ~
- Type:
type: string
start:
- NotBlank: ~
- Date: ~
表格类型:
<?php
namespace HvH\DealsBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class DealType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array('description' => 'name'))
->add('start', null, array('description' => 'start'))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'HvH\DealsBundle\Entity\Deal',
'csrf_protection' => false,
'cascade_validation' => false // have also tried this with true
));
}
public function getName()
{
return 'deal';
}
}