在Symfony 4项目中,我使用Bootstrap主题来呈现HTML内容。
我有一个表单,其中包含一个复选框,用于接受诸如:
☑我接受terms
我想将链接作为变量(视语言而定)
所以我有这样的翻译语言:
form:
register:
title: Registration
username: Username
email: Email
password: Password
repeat_password: Repeat your password
accept_terms: Accept %terms%
在我的formType
文件中,我无法注入翻译内容,因为找不到任何内容来填充%terms%
参数。
->add(
'termsAccepted',
CheckboxType::class,
[
'mapped' => false,
'constraints' => new IsTrue(),
'label' => 'form.register.accept_terms',
]
)
在树枝文件中,我无法更改form_label,因为...在Symfony documentation中,它表示form_label
不适用于复选框(和单选按钮)
{{ form_label(form.termsAccepted, 'that custom label is ignored...') }}
关于如何在复选框元素(引导程序4)上发送翻译(带有参数)的任何想法吗?
以我的嫩枝形式:
{% form_theme form.termsAccepted _self %}
{% block checkbox_label -%}
... here is a copy/paste of the orignial code from https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig ...
{{ widget|raw }}
<label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>
{% set terms_link = '<a href="http://url.com">'~'form.register.terms_link'|trans()~'</a>' %}
{{- label is not same as(false) ? (translation_domain is same as(false) ? label|raw : label|trans({'%terms%': terms_link}, translation_domain)|raw) -}}
{{- form_errors(form) -}}
</label>
{%- endif -%} {%- endblock checkbox_label %}
答案 0 :(得分:2)
在您看来,您可以在顶部插入
{% form_theme form.termsAccepted _self %}
文档https://symfony.com/doc/current/form/form_customization.html#child-forms
中的规定然后,您可以用所需的Bootstrap 4表单主题中随附的checkbox_label覆盖。只是写
{% block checkbox_label %}
Copy and paste here the same block from bootstrap 4 form them and edit as your needs. See https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig
{% endblock %}
此自定义块将仅用于form.termsAccepted。
如果需要更通用的解决方案,则可以创建自己的类型(例如扩展CheckboxlinkType
的{{1}},在CheckboxType
中添加所需的选项(linkUri和linkText)并传递其值到configureOptions
中的视图,然后您可以使用引导程序4表单主题中的那个作为基础并使用您的变量来编写渲染类型所需的特定块,称为buildView
。需要帮助。
答案 1 :(得分:1)
通过表单主题自定义模板的另一种解决方案是在您的表单类型中翻译标签并禁用在模板中执行的翻译:
->add('termsAccepted', CheckboxType::class, [
'mapped' => false,
'constraints' => new IsTrue(),
'label' => $this->translator->trans('form.register.accept_terms', [
'%terms%' => 'foo',
],
'translation_domain' => false,
])
您将必须在表单类型的构造函数中添加一个TranslatorInterface
参数,将其注册为服务并在此处注入translator
服务。