代码示例:
$dataContent = json_decode($request->getContent(), true);
$dataToCheck = [
'name' => [
new Assert\Required(),
new Assert\NotBlank(),
new Assert\Type('string'),
new Assert\Length(['min' => 4]),
],
'nick' => [
new Assert\Required(),
new Assert\NotBlank(),
new Assert\Type('string'),
new Assert\Length(['min' => 4]),
],
'email' => [
new Assert\Required(),
new Assert\NotBlank(),
new Assert\Email(),
],
'roleInCompany' => [
new Assert\Required(),
new Assert\NotBlank(),
new Assert\Type('string'),
new Assert\Choice(['choices' => ['manager',''supervisor','team leader']]),
],
'task' => [
new Assert\Required(),
new Assert\NotBlank(),
new Assert\Type('string'),
]
]
$constraint = new Assert\Collection($dataToCheck);
$violations = $validator->validate($dataContent, $constraint);
在上面的示例中,仅当“ roleInCompany”设置为“ supervisor”时,我才想验证“任务”。在其他情况下,可以跳过“任务”验证桅杆。 我不能使用实体类,所以我只能对数据进行操作,例如我发布的示例。
请帮助我该怎么做。 谢谢。
答案 0 :(得分:1)
为了正确地做某事,我建议您使用Symfony的事件表。这是documentation。您将设法根据另一个字段的结果动态更改表单。
对于您而言,使用PRE_SET_DATA会很有趣,它将允许您根据预先填充的数据(动态添加或删除字段)来修改表单。
这是您对表单事件的想法的一个例证
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add('roleInCompany', ....)
;
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use($factory){
$data = $event->getData();
$form = $event->getForm();
$roleInCompany = $data['roleInCompany'];
if($roleInCompany === 'supervisor'){
$form->add('task', 'text', array(
'required'=> true
))
}
}
);
}