theme form_widget form bootstrap symfony twig symfony-forms symfony-2.2 symfony-2.3

symfony - form_widget - twig form



Symfony2-> Twig-> Form-> Field-> Set rendered=true (3)

tengo un problema simple

Tengo un formulario con un campo, por ejemplo:

$builder ->add(''x'') ->add(''y'') ->add(''z'') ;

En mis archivos twig utilicé varios bloques y quiero detener los campos de render ... ¡Veo el archivo b.html.twig!

a.html.twig

{% block body %} {% block form %} {{ form_widget(form) }} {% endblock form %} {% endblock body %}

b.html.twig

{% block form %} {{ form.x.set(''rendered'', true) | default() }} {{ parent() }} {% endblock form %}

Si elimino el "valor por defecto ()" obtengo el error, que el objeto no se puede convertir a una cadena. Y en realidad, la forma representa todos los campos ... Incluido el campo x. Pero no deberían representar el campo x ...

¡Gracias de antemano!


¿Me estoy perdiendo la pregunta aquí? Si desea establecer un campo como renderizado aunque no sea la simple, es:

{% do form.x.setRendered %}

Si no entendí bien, mis disculpas.


Debe eliminar (o solo agregar) el campo de formulario en su FormType incluyendo algún tipo de lógica de decisión.

Por ejemplo, verificar la existencia / valor de una variable cerain.

Esta variable podría luego ser inyectada en el constructor.

Quitarlo de su plantilla es lógica de la aplicación que no pertenece a su plantilla.

Si no tiene otra opción, eche un vistazo al FormView::setRendered() .

Puede acceder a los métodos de un objeto usando la función de atributo Twigs:

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


Puede utilizar la siguiente declaración de formulario de cierre para evitar la representación de campos de formulario que están definidos en el Formulario pero que no se describen en la plantilla:

{{ form_end(form, {''render_rest'': false}) }}

Por ejemplo, definimos el siguiente formulario:

public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add( ''id'', HiddenType::class, array( ''required'' => false ) ) ->add( ''name'', TextType::class, array( ''required'' => false ) ) ->add( ''comment'', TextType::class, array( ''required'' => false ) ) ->add( ''amount'', TextType::class, array( ''required'' => false ) ); }

Para este formulario, describimos la siguiente plantilla, pero no queremos presentar la id campo, por lo que podemos usar la opción render_rest en el bloque form_end para omitir la representación de la id de campo:

{# render opening form tag #} {{ form_start(form) }} {# render field with label #} {{ form_row(form.name) }} {# render only field #} {{ form_widget(form.comment) }} {# render only label #} {{ form_label(form.amount) }} {# render only field #} {{ form_widget(form.amount) }} {# if csrf token is enabled for form render field #} {% if form._token is defined %} {{ form_widget(form._token) }} {% endif %} {# render closing form tag and do not render rest form elements #} {{ form_end(form, {''render_rest'': false}) }}