symfony断言实体类型变量

时间:2017-02-09 16:52:15

标签: forms symfony

如何验证实体变量,因为在我看来它对空选择有效。

 /**
 * @Assert\NotBlank(message = "education level cannot be empty")
 * @var EducationLevel[]|ArrayCollection
 * @ORM\ManyToMany(targetEntity="AppBundle\Entity\EducationLevel")
 */
private $educationLevel;

表单类型

->add('educationLevel', EntityType::class, [
            'class' => 'AppBundle:EducationLevel',
            'multiple' => true,
            'choice_label' => function ($educationLevel) {
                return $educationLevel->getName();
            },
        ])

2 个答案:

答案 0 :(得分:0)

NotBlank无法正常工作,因为它检查值是否为空或不为空字符串或不为false NotBlank manual

您需要做的是编写自定义约束和验证器:

Custom validator manual

答案 1 :(得分:-1)

您可以在实体中创建一个验证方法,该方法可以验证$ educationLevel是否为null或者是EducationLevel实例的集合。

/**
 * @Assert\IsTrue(message="Education level has to be blank or...")
 */
public function isEducationLevelValid()
{
    if ($this->educationLevel->isEmpty()) {
        foreach ($this->educationLevel as $edulevel) {
            if (!$edulevel instanceof EducationLevel) {
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}

该方法在实体绑定表单提交期间自动使用,当然您可以将其用作普通实体的方法。