kewpe20
kewpe20

Reputation: 85

form_widget with dynamic form name

In my Twig template I have a FOR LOOP that creates a multiple number of forms like so:

{% for thing in things %}

{% set form_id = 'myform_' ~ thing.Id %}

{% set form_name = attribute(form, 'myform_' ~ thing.Id) %}


 {{ form_widget(form_id) }}
 {{ form_widget(form_name) }}


{% endfor %}

I would like this to generate the following:

   {{ form_widget(myform_1) }}

   {{ form_widget(myform_2) }}

.... and so on.

I left my 2 failed attempts in there, (form_id and form_name), to save anyone from suggesting those as possible solutions.

To summarize; I need to insert the dynamically created value (myform_1, myform_2) inside of
{{ form_widget() }}

Upvotes: 5

Views: 2250

Answers (3)

miltone
miltone

Reputation: 4764

You can render dynamic fields form with dynamic name in Twig with special function of Twig :

{{ attribute(object, method) }}
{{ attribute(object, method, arguments) }}
{{ attribute(array, item) }}

With this function you can easily generate dynamic string name for your field dynamic into your form like this

{{ form_widget(attribute(form, 'myfielddynamicname' ~ var ~ ' lastchar')) }}

With this variable "var" (array or others type) you can render lot of dynamic form name like :

  • myfielddynamicnamefoolastchar
  • myfielddynamicnamebarlastchar
  • myfielddynamicnameneolastchar

For more understanding you can read this official twig documentation function

here : attribute twig function documentation

Upvotes: 6

Francesco Abeni
Francesco Abeni

Reputation: 4265

Don't create a loop in your Twig: the layout should only render a single form. Then you can build the forms in your controller and render each one of them.

See this documentation on the Symfony book on how to get the result of a rendered template. You can concatenate the single render results and return a response with the full content.

Upvotes: 0

Kofel
Kofel

Reputation: 53

The things myform_1 and myform_2 simply are variables with FormView object as you define in your controller. I don't know if Twig allows on dynamic variables call, although you can collect these form objects in array in controller before passing to view. After this step, you can just iterate thought this array It will manage the problem you are facing with.

Upvotes: 1

Related Questions