使用ManyToOne验证

时间:2017-03-23 09:13:30

标签: forms symfony validation symfony-forms

我有一个与List具有ManyToOne关系的实体“元素”(列表可以有多个元素)

std::string

如何通过传递列表的id而不是列表本身来验证表单以添加新元素? (列表必须存在)

3 个答案:

答案 0 :(得分:5)

在过去(2.8之前)我们能够设置cascade_validation标志,然后验证任何子对象预先保留。这至多是打击和错过。

这样,正确的方法是执行以下操作(请注意valid约束):

from the docs

use use Symfony\Component\Validator\Constraints as Assert;

class stuff 
{
    // ....

    /**
     * @ORM\ManyToOne(targetEntity="Liste")
     * @Assert\Valid
     */
    private $list;

    // ....
}

这将强制框架调用您在相关实体上的任何验证器。

可从symfony 2.7

获取

答案 1 :(得分:0)

您必须使用如下实体类型添加表单字段:

->add('list', EntityType::class, [
        'choice_label' => 'my test title'
    ])

答案 2 :(得分:0)

您必须遵循以下步骤:

1)在Form

中分配/设置实体类
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => 'CoreBundle\Form\Type\YourEntity',
    ])
}

2)在YourEntity上创建自定义验证

@Assert\CheckExistingList()

class YourEntity
{
  public function __construct()
}

3)创建新的验证器文件CheckExistingListValidator.php并在函数下面写下验证逻辑。

public function validate(Constraint $constraint)
{
    // logic here.
}

因此,无论何时提交表单,都应调用此验证,并在表单错误列表中显示错误消息。