如何确保作为属性嵌入的对象是有效还是空?

时间:2012-11-09 16:57:41

标签: symfony doctrine-orm

我有一个实体A的项目,它包含一个属性b,它应该是一个有效的B或null。 B本身就是强制性财产。

如何断言b有效或为空?我尝试使用Valid断言,但null无效,所以它抱怨mandatoryItem为null。

<?php 
// use statements

class A
{
    /**
     * @ORM\OneToOne(targetEntity="B")
     * @Assert\Valid
     */
    private b;
}

// meanwhile, in another file...
class B
{
   /**
    * @Assert\NotBlank
    */
   private $mandatoryItem;
}

1 个答案:

答案 0 :(得分:2)

在执行以下任何操作之前,请确保已启用Assert。如果那已经是原因,下面的步骤可能会对您有所帮助。

如果您使用表单提交数据并获得该表单的formType,但Valid约束不起作用,则可以执行此操作:

删除Valid断言。

ATypebuildForm()块中,您可以像这样添加它:

...
$builder->add('B', new BType(), array(
    'required' => false,
));
...

同样在AType类中添加此功能:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Your\AppBundle\Entity\A',
        'cascade_validation' => true,
    ));
}

'cascade_validation' => true,Valid相同,但在表单中。