我试图使用简单的表单定义来过滤一些数据,所以我创建了没有附加类的表单(期望使用getData()函数)然后使用传递给表单的参数数组,但表格总是无效的。结果表单正在尝试验证不属于表单上下文的参数。
我在字段" almacen"上收到此验证错误: 该值不应为空白。
有原因:
的Symfony \元器件\验证\ ConstraintViolation 对象(Symfony \ Component \ Form \ Form).data [almacen] .responsable = null
我尝试使用cascade_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...
}
...
}
我有一个简单的表单定义,声明了一个实体表单类型,并且没有与表单相关联的data_class。
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"留空,因此数据库中有一些行没有"负责任" asociated。 但尽管这不应该发生吗?我做错了什么?
答案 0 :(得分:0)
您有entity form field验证限制:
/**
* @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega")
* @Assert\NotBlank()
*/
private $responsable;
这是您的问题 - 断言not blank
验证值不为空,定义为非严格错误, 不等于空字符串,也不等于null
您可以选择添加验证组(read this和this)或简单删除Assert。此外,最好将@Assert\Valid用于此类关联。