Mam klasę formularza:
<?php
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', EmailType::class)
->add('password', PasswordType::class)
->add('terms', CheckboxType::class, [
'required' => true,
'label' => 'Akceptuję <a href="/regulamin">regulamin</a>'
]);
}
}
i widok (uproszczony):
{{ form(form) }}
Ale label jest wyświetlany jako zwykły tekst:
Akceptuję <a href="/regulamin">regulamin</a>
W jaki sposób można wymusić renderowanie HTML-a, żeby na stronie pojawił się link?
1 odpowiedź
Trzeba nadpisać szablon formularza, a konkretnie blok form_label
lub label konkretnego pola, jeżeli HTML ma być renderowany tylko dla jednego labela.
{% form_theme form _self %}
{% block form_label %}
<label>{{ label | raw }}</label>
{% endblock %}
{# lub #}
{% block _registration_terms_label %}
<label>{{ label | raw }}</label>
{% endblock %}
{{ form(form) }}
Blok form_label
jest uproszczony dla przykładu, należałoby w nim zawrzeć całą logikę z nadrzędnego szablonu formularza (domyślnie vendor/symfony/twig-bridge/Resources/views/Form/form_div_layout.html.twig
), żeby poprawnie obsługiwać np. tłumaczenia, atrybuty itd.
Własny szablon formularza można też przenieść do oddzielnego pliku i zaaplikować go do wszystkich formularzy:
{# custom_form_theme.twig.html #}
{%- use "form_div_layout.html.twig" -%}
{%- block form_label -%}
<label>{{ label | raw }}</label>
{%- endblock -%}
# /config/packages/twig.yaml
twig:
form_themes:
- 'custom_form_theme.twig.html'