我正在处理公司CRM中的表单,该表单将作业添加到数据库中。以前它非常简单,但现在它变得越来越复杂我需要有条件地要求某些字段,但只是基于以前字段中的特定选择。
当要添加作业时,有不同的状态,特别是待定,活动,完成和保持。有一个名为start_date
的字段总是需要的,除非所选择的状态是待定。但是,我不知道如何动态更改它,如果我不需要日期字段且状态未被预订且日期未填写 - 这将意味着作业将无法正确加入。
以下是需要协同工作的两个字段:
$builder->add('status', ChoiceType::class,
array(
'label' => 'Initial Status',
'required' => true,
'placeholder' => 'Please choose',
'attr' => array(
'class' => 'form-control'
),
'choices' => $this->status_list
));
$builder->add('job_date', TextType::class,
array(
'label' => 'Job Date',
'required' => true,
'attr' => array(
'class' => 'pickr form-control'
)
));
状态的选择如下:
$status_list = array(
'To Be Booked' => 'to_be_booked',
'Current' => 'active',
'Ready For Invoice' => 'ready',
'Incomplete' => 'incomplete',
'Complete' => 'complete'
);
如果选择的状态为to_be_booked
,则需要从job_date
字段取消需求,但需要任何其他状态。
如何做到这一点?
答案 0 :(得分:3)
您可以添加PRE_SUBMIT表单事件以检查第二个字段的值是否正确
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $formEvent) {
$data = $formEvent->getData();
$form = $formEvent->getForm();
if ('to_be_booked' !== $data['status']) {
if(!isset($data['job_date']) || empty($data['job_date'])) {
$form->addError(new FormError('The job date is mandatory'));
return;
}
}
})
如果没有提交job_date且状态不是to_be_booked
请查看https://symfony.com/doc/current/form/events.html以获取有关symfony表单事件的更多详细信息
如果此约束不是特定于此表单但对您的应用程序是全局的,则应使用自定义验证程序,请检查https://symfony.com/doc/current/validation/custom_constraint.html