How to make RadioButton in Symfony Form? - symfony

I have form that i have to redo with Symfony Form but i stuck on this place:
<div class="currency-label">
<input checked id="cur1" name="currency" type="radio">
<label for="cur1">EURO</label>
</div>
<div class="currency-label active">
<input id="cur2" name="currency" type="radio">
<label for="cur2">USD</label>
</div>
This is how it looks:
how to make radiobutton with Symfony Forms?
In my form class i added:
->add('vacancyCurrency', RadioType::class, ['required' => false])
and to my template
{{ form_widget(form.vacancyCurrency) }}
my form became shorter and obviously no css :
and if i add css class to form it looks differently :
{{ form_widget(form.vacancyCurrency, {'attr':
{'class': 'currency-label'}
}) }}

The best way to do it is to render a ChoiceType as radio buttons:
->add(
'vacancyCurrency',
ChoiceType::class,
[
'choices' => [
'US Dolar' => 'usd',
'Euro' => 'eur',
],
'expanded' => true
]
);
The ChoiceType field it's rendered as radio buttons when you have the options multiple = false and expanded = true. The option multiple is not in the code above because its default value is false. You can find more details here
Edit:
In your twig template, you just need to add:
{{ form_widget(form.vacancyCurrency) }}
Edit 2
You said in the comments to this answer that you need to put each radio button inside a <div class="currency-label active">. I believe you can't do it by setting attributes in the Symfony Form Field itself. The options you have there, like choice_attr operate in the input, not in the divs that surround it.
It's possible to achieve what you want, but you'll need to write some code and render the radio buttons by hand, like:
<div class="form-group">
<label class="control-label required">Vacancy currency</label>
{% for child in form.vacancyCurrency %}
<div class="currency-label active">
<label for="{{ child.vars.id }}" class="required">
<input type="radio" id="{{ child.vars.id }}" name="{{ form.vars.id ~ '[' ~ form.vacancyCurrency.vars.name ~ ']' }}" required="required" class="checkbox" value="{{ child.vars.label }}">
{{ child.vars.label }}
</label>
</div>
{% endfor %}
</div>
Of course, you can use some Javascript to do the job. For example, you can render the form field like:
{{ form_widget(form.vacancyCurrency) }}
It will add each radio button inside a div with class="radio".
Then you can change the class to what you want as soon as the page is ready with some JQuery:
$(document).ready(function() {
$(".radio").attr("class", "currency-label active");
});

So that is how i solved this, in template:
{{ form_start(form) }}
{% form_theme form _self %}
{% block choice_widget %}
{% for child in form.vacancyCurrency %}
<div class="currency-label">
{{- form_widget(child) -}}
{{- form_label(child, null) -}}
</div>
{% endfor %}
{% endblock choice_widget %}
{{ form_end(form) }}
in form class:
->add('vacancyCurrency', ChoiceType::class, [
'choices' => [
'USD' => 'USD',
'RUB' => 'RUB',
],
'expanded' => true,
])
and to make one of them active i set default data in model:
public $vacancyCurrency = 'RUB';
Update
now i have interface for currency and use it in form class:
->add('currency', ChoiceType::class, [
'label' => 'Валюта',
'choices' => \array_combine(CurrencyInterface::ALL, CurrencyInterface::ALL)
])

Related

Symfony 3.4: NumberType & MoneyType are rendering text type html input instead of number type input

I'm working with Symfony 3.4 and I get an issue with NumberType Form Field which is rendering a text input:
ElementArrivageType.php:
->add('prixUnit', NumberType::class, array(
'scale' => 3,
'attr' => array(
"min" => 0,
"scale" => 3,
"step" => 0.001,
"placeholder" => "0.000",
)
))
Twig:
{{ form_widget(form.prixUnit, {'attr': {'class': 'form-control'}}) }}
Result F12:
<input type="text" id="appbundle_arrivage_elementArrivages_2_prixUnit" name="appbundle_arrivage[elementArrivages][2][prixUnit]" required="required" min="0" scale="3" step="0.001" placeholder="0.000" class="form-control prixUnit" value="500.011">
When documenting I found a Solution that doesn't worked for me :
Twig :
{% block number_widget %}
<div class="number_widget">
{% set type = type|default('number') %}
{{ block('form_widget_simple') }}
</div>
{% endblock %}
{{ form_start(form) }}
{{ form_row(form) }}
{{ form_end(form) }}
The only solution that I found is a not clean solution:
//forcing type when loading DOM:
$('#appbundle_arrivage_elementArrivages_2_prixUnit').prop('type', 'number');
Does anyone have a clean solution ?
For me, it's resolved by Form Functions and Variables Reference:
{{ form_row(form.price, {'type': 'number'}) }}
Documented here: https://symfony.com/doc/current/form/form_customization.html#method-2-inside-a-separate-template
Based on the Symfony's documentation:
Renders an input text field and specializes in handling number input.
https://symfony.com/doc/3.4/reference/forms/types/number.html
So it's ok if you have a text input. Symfony will, on submit, check if it's a number and not a string

Symfony: trying to customize a collection form prototype

I have this form:
class BillType extends AbstractType
{
/**
* #param FormBuilderInterface $builder
* #param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('user')
->add('numberPlate')
->add('servicesPerformed', CollectionType::class, array(
'label' => false,
'entry_type' => ServicePerformedType::class,
'allow_add' => true,
))
->add('Save', SubmitType::class)
;
/**
* #param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'DefaultBundle\Entity\Bill'
));
}
being ServicePerformedType class this:
class ServicePerformedType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', TextareaType::class, array('label' => false))
->add('price', TextType::class, array('label' => false))
->add('quantity', TextType::class, array('label' => false));
}
}
And this template to render the form:
{{ form(form) }}
Add service
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript">
var index = 0;
$('a').on('click', function() {
var prototype = $('#bill_servicesPerformed').data('prototype');
prototype = prototype.replace(/_name_/g, index.toString());
$('#bill_servicesPerformed').html(prototype);
index++;
})
</script>
As it is said in the docs, to get a custom prototype I should add the lines below at the top of my template:
{% form_theme form _self %}
{% block _servicesPerformed_entry_widget %}
I WILL WRITE MY CUSTOM PROTOTYPE HERE
{% endblock %}
But when I press Add service I dont get the text I WILL WRITE MY CUSTOME PROTOTYPE HERE, but the description, fields and quantity related to the ServicePerformedType class as before..
NOTE: maybe there are other ways to custom a form prototype, but I'm interested on this, so will be very thankful to someone who give a solution related to this way to custom form prototypes, thanks.
I must warn you that customizing the prototype could be a bit tricky. If you change your FormType fields you'll need to go through the template and make the same changes as well or your form will fail to render.
What I like to do is to create a custom template for that specific field and then customize it appropriately. So, looking at your code I would do something like this:
Create a page template - the one you'll use to render the entire page, including the form.
{# MyBundle/Resources/views/myPage.html.twig #}
{% extends "::base.html.twig" %}
{# This will tell the form_theme to apply the
`MyBundle:form/fields/servicePerformed.html.twig` template to your "form" #}
{% form_theme form with [
'MyBundle:form/fields/servicePerformed.html.twig'
] %}
{% block body %}
<div>
{{ form_start(form) }}
{{ form_rest(form) }}
{{ form_end(form) }}
</div>
{% endblock %}
Now you'll need to create the template MyBundle/Resources/views/form/fields/servicePerformed.html.twig. It will be used to customize only the servicePerformed field. The template should look something like this
{% macro service_template(fields) %}
<tr>
<td>I WILL WRITE MY CUSTOM PROTOTYPE HERE</td>
</tr>
{% endmacro %}
{#
The block name must match your field name!
You can find it by going into the debug toolbar -> Forms ->
click on your form field and then search for "unique_block_prefix".
Copy that and add "_widget" at the end.
#}
{% block _service_performed_widget %}
<table data-prototype="{{ _self.service_template(form.vars.prototype)|e }}">
{% for fields in form.children %}
{{ _self.service_template(fields) }}
{% endfor %}
</table>
{% endblock %}
I want to note that in the field template I'm passing the original prototype _self.service_template(form.vars.prototype). By doing this, you can use the original fields and render them in your customized prototype. For example this code:
{% macro service_template(fields) %}
<tr>
<td>{{ form_widget(fields.description) }}</td>
</tr>
{% endmacro %}
Will result in something like the following rendered prorotype:
<tr>
<td>
<input type="text" id="service_performed___name___description" name="service[__name__][description]"/>
</td>
</tr>
You can then manipulate it using your javascript.
I hope this helps you.
Actually form theme blocks that start with an underscore _ relate to a field with a specific name.
What I mean is that, if your master form BillType is called my_form, you will need to do this:
{% form_theme form _self %}
{% block _my_form_servicesPerformed_entry_widget %}
I WILL WRITE MY CUSTOM PROTOTYPE HERE
{% endblock %}
The problem with this approach is that it concerns a specific iteration of BillType. If you use this form type elsewhere and provide it with a different name my_form_2, you would have to add an identical block named _my_form_2_servicesPerformed_entry_widget.
You can use macro, have a look at below example it's working fine for me even in Symfony3. Using this example you will be able to format your collection prototype as well.
View
{% macro widget_prototype(widget, remove_text) %}
{% if widget.vars.prototype %}
{% set form = widget.vars.prototype %}
{% set name = widget.vars.name %}
{% else %}
{% set form = widget %}
{% set name = widget.vars.full_name %}
{% endif %}
<div data-content="{{ name }}" class="panel panel-default">
<div class="section row">
<div class="col-md-12">
<label class="field-label">Skill <span class="text-danger">*</span></label>
<label class="field select">
{{ form_widget(form.skill) }}
<i class="arrow double"></i>
</label>
</div>
</div>
<div data-content="{{ name }}">
<a class="btn-remove" data-related="{{ name }}">{{ remove_text }}</a>
{{ form_widget(form) }}
</div>
</div>
{% endmacro %}
Your template to render the form has some problems. The first is this line:
prototype = prototype.replace(/_name_/g, index.toString());
The regex should be __name__.
Next, you are retrieving the prototype, but then immediately overwriting it and replacing the HTML of the prototype. There is nothing there I can see that actually appends the new form to your existing form anywhere. Plus since you just have a string of text, that replace isn't going to find any text __name__ to replace.
You should post the full extent of your Twig/Javascript so we can actually see the #bill_servicesPerformed as well as everything else you are trying to do. Before you write a custom prototype you should get the form working with the standard prototype just to make sure you don't have any bugs there first.
As an example, this is the way I keep going it. I do not know if there are some reasons not to, so be careful.
Form to include prototype:
<div class="modal-body" id="contactMehtods" data-prototype="
{% filter escape %}
{{ include(':organization/partials:prototype_contact_method.html.twig', { 'contact_method': contact_form.contactMethods.vars.prototype }) }}
{% endfilter %}">
<div class="form-group">
{{ form_label(contact_form.name, null, { 'label_attr': { 'class': 'control-label' }}) }}
{{ form_widget(contact_form.name, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
Prototype template:
<div class="form-group">
{{ form_label(contact_method.name, null, { 'label_attr': { 'class': 'col-sm-3 control-label' }}) }}
<div class="col-sm-9">
{{ form_widget(contact_method.name, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_label(contact_method.value, null, { 'label_attr': { 'class': 'col-sm-3 control-label' }}) }}
<div class="col-sm-9">
{{ form_widget(contact_method.value, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
But a note to consider, the javascript needs to accommodate for these changes I guess.

add class atribute to symfony form builder row div

here is my AbstractType code :
$builder->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))
code above generated :
<form class="fos_user_registration_register form-horizontal" role="form" method="POST" action="/app_dev.php/register/">
<div id="fos_user_registration_form">
<div>
<label class="required" for="fos_user_registration_form_email">Email: </label>
<input id="fos_user_registration_form_email" type="email" required="required" name="fos_user_registration_form[email]">
</div>
</div>
</form>
</div>
my question is how to add class attribute to the row div become :
<div class="form-group">
<label class="required" for="fos_user_registration_form_email">Email: </label>
<input id="fos_user_registration_form_email" type="email" required="required" name="fos_user_registration_form[email]">
</div>
Symfony2/Twig has a wonderful form rendering engine; it'd be a waste to completely override it. As a much more elegant alternative, we can take advantage of the built-in form themes. As per the documentation:
Symfony comes with four built-in form themes that define each and every fragment needed to render every part of a form
We can override the default theme and create our own. This allows us to override the form_row block, and add our own lovely attributes to the surrounding div. Simply put this in a file, say: views/forms/fields.twig.
{% block form_row %}
<div class="form-group">
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endblock %}
We don't need to worry about the other declarations, as Symfony will overload only what's changed.
We can now reference it from the page template. Replace form with the name of the form variable passed to the template:
{% form_theme form 'forms/fields.twig' %}
Of course, you're free to add a declaration to grab a form attribute instead of hard-coding the class name.
(Source: http://symfony.com/doc/2.7/cookbook/form/form_customization.html)
for me the answer of skler is not a solution, because it add the class to the input email, not to the div.
edit:
A better solution
{% for child in form.children|keys %}
<div class="login_field">
{% if 'token' not in form_label(attribute(form.children,child)) %}
{{form_label(attribute(form.children,child)) }}
{% endif %}
{{form_widget(attribute(form.children,child)) }}
</div>
<br/>
{% endfor %}
result in:
<div class="registration_field">
<label>e-mail</label>
<input type="email">
</div>
it remove unused div and the token label, and we can use .registration_field selector instead of .registration_field > div
for Amstell:
i answer to the solution of skler, saying that for me it's not a solution,
Sorry, it's not clear.
Add into your app/config/config.yml following lines:
twig:
form:
resources: ['bootstrap_3_layout.html.twig']
or
twig:
form_themes:
- "bootstrap_3_layout.html.twig"
http://symfony.com/blog/new-in-symfony-2-6-bootstrap-form-theme
This question is very similar to this other except for the fact that you should use:
{{ form_start(form), {'attr': {'class': 'form-group'}} }}
Another solution is to define it in Form\Type class:
$builder->add('email', 'email', array(
'label' => 'form.email',
'translation_domain' => 'FOSUserBundle',
'attr' => array('class' => 'form-group'),
'label_attr' => array('class' => 'if-you-want-also-style-attr-label'),
));

Symfony: How to avoid custom form-types getting wrapped in a div automatically?

UserType Form:
class UserType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', 'email', ['label' => 'EMail']);
// various other fields....
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('registration'),
'data_class' => 'Vendor\Model\Entity\User',
));
}
public function getName()
{
return 'form_user';
}
}
TutorType Form:
class TutorType extends Translate
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user', new UserType(), ['label' => false]);
$builder->add('school', 'entity', [
'class' => 'Model:School',
'property' => 'name',
'label' => 'Label'
]);
// Various other fields
$builder->add('save', 'Submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
//'validation_groups' => array('registration'),
'data_class' => 'Vendor\Model\Entity\Tutor',
'cascade_validation' => true,
));
}
public function getName()
{
return 'form_tutor';
}
}
When rendering, the UserType is rendered inside a div, i cant find a way to overcome this.
The Form is rendered as
<form name="form_tutor"
method="post"
action=""
novalidate="novalidate"
class="form-horizontal form-horizontal"
id="form_tutor">
<div id="form_tutor"
novalidate="novalidate"
class="form-horizontal">
<div class="form-group">
<div class="col-lg-10">
<div id="form_tutor_user">
<div class="form-group">
<label class="col-lg-2 control-label aaaa required"
for="form_tutor_user_email">EMail</label>
<div class="col-lg-10">
<input type="email"
id="form_tutor_user_email"
name="form_tutor[user][email]"
required="required"
class="form-control" />
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label aaaa required"
for="form_tutor_tutorType">Type</label>
<div class="col-lg-10">
<select id="form_tutor_tutorType"
name="form_tutor[tutorType]"
class="form-control">
</select>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit"
id="form_tutor_save"
name="form_tutor[save]"
class="btn btn-default">Speichern</button>
</div>
</div><input type="hidden"
id="form_tutor__token"
name="form_tutor[_token]"
class="form-control"
value="s6i6zPxJs7KU5CiEe8i6Ahg_ca8rc2t5CnSk5yAsUhk" />
</div>
</form>
The form_tutor_user is wrapped in a own form-group div.
I tried to overwrite the form_tutor_user_widget but this is one level to deep. (And only a quick fix, it should be globally applied to all form type - Classes)
How can i change the theme so all custom types are not wrapped with the default form_row template?
Or how do i know in twig when a "subform" is rendered?
so i can decide to print the <div class="form-group"> when the child-node is not a subform, or skip it, if this is the case.
TIA
By default, in the base form theme:
{% block form_row %}
{% spaceless %}
<div>
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
And, for custom compound forms:
{% block form_widget_compound %}
{% spaceless %}
<div {{ block('widget_container_attributes') }}>
{% if form.parent is empty %}
{{ form_errors(form) }}
{% endif %}
{{ block('form_rows') }}
{{ form_rest(form) }}
</div>
{% endspaceless %}
{% endblock form_widget_compound %}
Unless you changed something here, the DIV you see should come from either one or the other bit of template.
However, in your specfic example, if form_tutor_user_row is defined, the first bit is never used, and if form_tutor_user_widget is defined, the last bit is never used.
Back to your question. Your question is :
"How can i change the theme so all custom types are not wrapped with the default form_row template?"
Here is the problem the way I see it: you want that your TOP forms (the form in which all sub-forms are included) all have a common way of rendering, in sections. Each section will be included in a DIV with class="form-group". You may want to throw in some additional rendering operations but I will limit myself to this to keep things simple.
What you need to do then is to create a specfic form type and make all your TOP forms inherit from this new form type. For instance:
class TopType extends AbstractType
{
public function getName()
{
return 'top_form';
}
}
... and an inherited form:
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
...
}
public function getName()
{
return 'my_form';
}
public function getParent()
{
return 'top_form';
}
}
As you can see, there is no need to make PHP inheritance for form theming inheritance to work.
Template-theming-wise (can I even say that?), if no specific form theming is set for my_form, Symfony will understand that the default form theme to use here is the form theme of top_form, that you can define as such:
{% block top_form_widget %}
{% spaceless %}
{% for child in form %}
<div class="form-group">
{{ form_widget(child) }}
</div>
{% endfor %}
{{ form_rest(form) }}
{% endspaceless %}
{% endblock top_form_widget %}
I should add that this is a problem I already encountered and solved. Tell me how that works for you.
Edit:
To sum it up, what you have to do is:
Create the TopType form type,
Add the top_form_widget block in your form theme,
For all your root forms (i.e. top-level forms, forms that have no parent), add a getParent() method that will return the name of your TopType form ("top_form")
In theory, if you override the form_widget_compound block in a global form theme this way, it should work as you want:
// app/Resources/views/form.html.twig
{% block form_widget_compound %}
{% if form.parent is empty %}
<div {{ block('widget_container_attributes') }}>
{{ form_errors(form) }}
{% endif %}
{{ block('form_rows') }}
{{ form_rest(form) }}
{% if form.parent is empty %}
</div>
{% endif %}
{% endblock %}
And register your form theme:
// app/config/config.yml
twig:
form:
resources:
- "::form.html.twig"
I usually solve this problem by rendering the nested form's fields manually:
{{ form_row(form.tutor.school) }}
{{ form_row(form.tutor.user.email) }}
Probably that's not the most elegant solution, but it works for me and I haven't looked for an elegant one yet.
Bootstrap 3.3.4 I ended up doing this.
They key part of this:
<div class="{% if form.parent.parent is empty %}form-group{% endif %}{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
Full template.
{% block form_row -%}
<div class="{% if form.parent.parent is empty %}form-group{% endif %}{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
{% if form.parent.parent is null and label is not empty %}
{{- form_label(form) -}}
{% elseif label is empty %}
{{- form_label(form) -}}
{% endif %}
{% if compound is empty %}<div class="{{ block('form_group_class') }}">{% endif %}
{{- form_widget(form) -}}
{{- form_errors(form) -}}
{% if compound is empty %}</div>{% endif %}
</div>
{%- endblock form_row %}
Maybe it is not an elegant solution, however works for me, because I was also trying to find the solution.
As an example:
{% for custom_field in form.custom_fields %}
<div class="edit_custom">
{{ form_row(custom_field.name) }}
{{ form_row(custom_field.value) }}
</div>
{% endfor %}
<script>
$('.edit_custom').find('input').unwrap();
</script>
Try using form_themes.
First, in you parent template define the form theme:
{% form_theme form with ['BundleName:ControlerName:somesubform_form.html.twig'] %}
btw replace BundleName, ControllerName and somesubform with the proper names.
then render it with:
{{ form_row(form.somesubform) }}

How to add an image to each choice of a choice list in a Symfony2 form?

I'm using Symfony 2 form to create an expanded choice list using radio buttons for selecting whether to post a blog as an anonymous user or not anonymous (showing username).
The form field type definition in the BlogType.php file looks like the following (I'm passing the choices with their values from the controller, but it should be irrelevant to my question):
$builder->add('is_anonymous', 'choice', array(
'choices' => $options['is_anonymous'],
'required' => true,
'multiple' => false,
'expanded' => true,
));
I tried to apply the "How to customize an Individual field" section from the Symfony2 Cookbook by doing the following in my template twig file:
<div class="post_as">
{{ form_label(form.is_anonymous, 'Post as:') }}
{{ form_errors(form.is_anonymous) }}
{% form_theme form _self %}
{% block _factor_is_anonymous_0_label %}
<img src="/images/anonymous-32.png"/>
{{ block ('form_label') }}
{% endblock %}
{% block _factor_is_anonymous_1_label %}
<img src="/images/user-32.png"/>
{{ block ('form_label') }}
{% endblock %}
{{ form_widget(form.is_anonymous) }}
</div>
However, the above results in both images showing before the choice list in addition to each showing next to its corresponding radio button, as seen in the resulting html:
<div class="post_as">
<label class="required">Post as:</label>
<img src="/images/anonymous-32.png"/>
<img src="/images/user-32.png"/>
<div id="factor_is_anonymous">
<input type="radio" id="factor_is_anonymous_0" name="factor[is_anonymous]" required="required" value="true" />
<img src="/images/anonymous-32.png"/>
<label for="factor_is_anonymous_0" class="required">Anonymous Collaborator</label>
<input type="radio" id="factor_is_anonymous_1" name="factor[is_anonymous]" required="required" value="false" />
<img src="/images/user-32.png"/>
<label for="factor_is_anonymous_1" class="required">User Name</label>
</div>
</div>
How can I get rid of the images from showing twice? I think this has to do with the images showing in the rendering of the overall choice "row" as well as in the rendering of each of the 2 choices. I tried various combinations for displaying the overall label and not, but I haven't been able to solve the issue... Could anyone help? thanks...
You need to move the definitions for your form blocks outside of any other block. Ie, move these lines outside any other block, best would be at the beginning or end of file
{% block _factor_is_anonymous_0_label %}
<img src="/images/anonymous-32.png"/>
{{ block ('form_label') }}
{% endblock %}
{% block _factor_is_anonymous_1_label %}
<img src="/images/user-32.png"/>
{{ block ('form_label') }}
{% endblock %}

Resources