Jak w Symfony umieścić HTML w labelu checkboxa?

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'

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.