我创建了一个自定义表单类型 - RecaptchaType
。我使用$builder->add('recaptcha', RecaptchaType::class)
将其添加到多种形式中。对于视图,我创建了一个宏,因此在twig中我将其呈现如下{{ forms.recaptcha(form.recaptcha) }}
。
但现在我只想为未登录的用户显示recaptcha。在twig宏中,我可以简单地添加条件。但是,如果我只想编辑RecaptchaType并且不想触摸正在使用它的表单类型,那么如何才能在表单类型中添加(或删除)recaptcha输入。
我有两个想法,但它们都没有起作用。
$builder->remove('recaptcha')
(用户已登录)$resolver->setDefaults()
,在表单中访问它并依赖于值->add
。但我无法访问该值。你会怎么做?如果需要,我可以添加代码示例。
答案 0 :(得分:3)
TL; DR; 要删除有条件地将此逻辑封装在其自身内的表单类型,您可以执行以下操作:
RecaptchaType
:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
if ($this->isAuthenticated()) {
$form = $event->getForm();
$form->getParent()->remove($form->getName());
}
});
}
现在,如果您要自定义表单主题,请确保在呈现之前检查字段是否存在:
{% if form.recaptcha is defined %}
{{ forms.recaptcha(form.recaptcha) }}
{% endif %}
只要您的RecaptchaType
嵌入到其他表单中,就应该有效。