我有一个与List具有ManyToOne关系的实体“元素”(列表可以有多个元素)
std::string
如何通过传递列表的id而不是列表本身来验证表单以添加新元素? (列表必须存在)
答案 0 :(得分:5)
在过去(2.8之前)我们能够设置cascade_validation
标志,然后验证任何子对象预先保留。这至多是打击和错过。
这样,正确的方法是执行以下操作(请注意valid
约束):
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.
}
因此,无论何时提交表单,都应调用此验证,并在表单错误列表中显示错误消息。