使用简单符号形式的奇怪行为约束



我正在尝试使用一个简单的表单定义来过滤一些数据,所以我创建了没有附加类的表单(期望使用 getData() 函数),然后使用传递给表单的参数数组,但表单总是无效。表单尝试验证不属于表单上下文的参数的结果。

我在"almacen"字段上收到此验证错误: 此值不应为空。

有原因:

Symfony\Component\Validator\ConstraintViolation Object(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
*
* @ORMColumn(name="codigo", type="string", nullable=true)
* @AssertNotBlank()
*/
private $codigo;
/**
* @var string
*
* @ORMColumn(name="nombre", type="string")
* @AssertNotBlank()
*/
private $nombre;
/**
* @ORMManyToOne(targetEntity="BusetaBodegaBundleEntityTercero", inversedBy="bodega")
* @AssertNotBlank()
*/
private $responsable;
...
}

在实体 Bodega 的先前版本中,参数"负责"保留为空,因此数据库中有一些行没有关联"负责"。 但尽管如此,这不应该发生吗?我做错了什么?

您有一个具有验证约束的实体表单字段:

/**
* @ORMManyToOne(targetEntity="BusetaBodegaBundleEntityTercero", inversedBy="bodega")
* @AssertNotBlank()
*/
private $responsable;

这是你的问题 - 断言不为空

验证值是否不为空,定义为不严格为 false, 不等于空白字符串,也不等于空

您几乎没有选择,要么添加验证组(阅读此和此),要么简单地删除该断言。此外,最好将 @Assert\Valid 用于此类关联。

最新更新