Php 使用简单symfony形式的怪异行为约束
我试图使用一个简单的表单定义来过滤一些数据,因此我创建了没有附加类的表单(期望使用getData()函数),然后处理传递给表单的参数数组,但是表单总是无效的。结果窗体尝试验证不属于窗体上下文的参数 我在“almacen”字段上得到了这个验证错误: 此值不应为空 有理由: Symfony\Component\Validator\ConstraintViolation 对象(Symfony\Component\Form\Form).data[almacen].responsable=null 我尝试使用Php 使用简单symfony形式的怪异行为约束,php,forms,symfony,validation,symfony-forms,Php,Forms,Symfony,Validation,Symfony Forms,我试图使用一个简单的表单定义来过滤一些数据,因此我创建了没有附加类的表单(期望使用getData()函数),然后处理传递给表单的参数数组,但是表单总是无效的。结果窗体尝试验证不属于窗体上下文的参数 我在“almacen”字段上得到了这个验证错误: 此值不应为空 有理由: Symfony\Component\Validator\ConstraintViolation 对象(Symfony\Component\Form\Form).data[almacen].responsable=null 我尝试
cascade\u validation=false
,但没有成功
在控制器操作中,我声明:
public function indexAction(Request $request)
{
$informeStock = $this->createForm(new BusquedaInformeStockType());
$informeStock->handleRequest($request);
if ($informeStock->isSubmitted() && $informeStock->isValid()) {
$data = $informStock->getData();
// the action logic...
}
...
}
我有一个简单的表单定义,声明了实体表单类型,没有与表单相关的数据类
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('almacen', 'entity', array(
'class' => 'BusetaBodegaBundle:Bodega',
'placeholder' => '---Seleccione---',
'required' => false,
'label' => 'Bodega',
'attr' => array(
'class' => 'form-control',
),
))
...
...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
这是实体Bodega的定义:
class Bodega
{
...
/**
* @var string
*
* @ORM\Column(name="codigo", type="string", nullable=true)
* @Assert\NotBlank()
*/
private $codigo;
/**
* @var string
*
* @ORM\Column(name="nombre", type="string")
* @Assert\NotBlank()
*/
private $nombre;
/**
* @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega")
* @Assert\NotBlank()
*/
private $responsable;
...
}
在实体Bodega的早期版本中,参数“responsable”保留为空,因此db thas中的某些行没有“responsable”关联。
但尽管如此,这不应该发生,对吗?我做错了什么?您有一个验证约束:
/**
* @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega")
* @Assert\NotBlank()
*/
private $responsable;
这是你的问题-断言
验证值是否不为空,是否定义为不完全为false,
不等于空白字符串,也不等于null
您几乎没有选择,要么添加验证组(和),要么简单地删除该断言。同样,最好用于这样的关联。该字段
$resposable
是Bodega实体的一部分,但我没有定义该实体,我只使用Bodega填写筛选表单上的“选择”。