Symfony6 -提交表单后添加输入字段



我有一个ChoiceType::class输入字段在我的表单,现在只是作为一个例子,两个选择:"选择"=比;['类型1 ' =比;'1', 'type2' =>' 2 ']

现在当用户选择type2我想添加一个额外的TextType::类输入字段的形式。但是我不想显示输入字段之前,我希望它是必需的,如果选择type2,而不是如果选择type1。

我希望它是有意义的,我尝试它与javascript和设置属性为隐藏或不,但是然后,由于必需的属性,表单没有被发送。

我尝试了表单事件,但没有让它以这种方式工作。

感谢

你的方法是对的,你必须用Javascript来做。你只需要管理Javascript中所需的attr,这样表单就不会用这样的东西阻止你:

  • 从字段中删除所需属性:document.getElementById("id").required = false;
  • 设置必填项:document.getElementById("id").required = true;

您可以检查表单是否可以提交:document.getElementById("idForm").reportValidity();

使用带有数据属性的条件字段的实现,例如:

->add('typeField', EnumType::class, [
'label' => 'Type',
'class' => MyTypeEnum::Class,
])
->add('someField', TextField::class, [
'data-controller' => 'depends-on',
'data-depends-on' => 'my_form_typeField',
'data-depends-value' => MyTypeEnum::OTHER->value,
])

在前端JS刺激控制器显示/隐藏someField依赖于typeField值。object (formType中的'data_class')中的validation()函数进行自定义验证,例如:

/**
* @AssertCallback
*/
public function validate(ExecutionContextInterface $context)
{
if ($this->typeField !== MyTypeEnum::OTHER) {
$context->buildViolation('message')->atPath('typeField')->addViolation();
}
}

相关内容

  • 没有找到相关文章

最新更新