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

时间:2017-06-21 19:39:30

标签: php forms symfony validation symfony-forms

我试图使用简单的表单定义来过滤一些数据,所以我创建了没有附加类的表单(期望使用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。 但尽管这不应该发生吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

您有entity form field验证限制:

/**
 * @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega")
 * @Assert\NotBlank()
 */
private $responsable;

这是您的问题 - 断言not blank

  

验证值不为空,定义为非严格错误,   不等于空字符串,也不等于null

您可以选择添加验证组(read thisthis)或简单删除Assert。此外,最好将@Assert\Valid用于此类关联。