theme form_theme form custom collection change _self php forms symfony twig

php - form_theme - symfony render form



¿Cómo hacer que form_rest() no muestre un campo con Symfony2? (4)

La situación en la que no desea mostrar un campo sugiere una forma mal diseñada. Podría alimentar algunos argumentos en su __construct para hacerlo condicional (por ejemplo, incluir / excluir algunos campos) o simplemente podría crear clases de Form separadas (que, en mi opinión, es un poco exagerado).

Tuve casos comunes hace unos meses cuando la forma difería cuando el usuario insertaba / actualizaba registros. Fue algo como esto:

... public function __construct($isUpdateForm){ $this->isUpdateForm= $isUpdateForm; } public function buildForm(FormBuilder $builder, array $options){ .... $builder->add(''some_filed'', ''text'', ..... ); if ( $this->isUpdateForm ){ $builder->add(.....); } .... } ....

Si por alguna razón no puede refactorizar la clase de formulario, aún podría mostrar los campos no deseados, pero envolverlos en <div> que tiene display:none atributo CSS display:none . De esa manera "todavía están allí" (y por supuesto se procesan normalmente) pero no son visibles para el usuario.

Espero que esto ayude...

Empecé a usar Symfony2 pero tengo algunos problemas. Quería renderizar los campos a mano, pero no funciona porque mi campo ya representado por mí también se muestra con la función form_rest() , así que tengo dos campos iguales.

Aquí está mi código:

<div> {{ form_errors(form.contenu) }} <textarea id="{{ form.contenu.vars.id }}" name="{{ form.contenu.vars.full_name }}">{{ form.contenu.vars.value }}</textarea> </div>

Y, al final del formulario, debo poner esto:

{{ form_rest(form) }}

Pero muestra el campo "contenu" :(

¿Tienes una idea de cuál es el problema?


Otra en mi opinión, una forma menos hacky de hacerlo es esta:

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

Es de la documentación oficial (v3.0) así que es una buena práctica, supongo.


Otra opción es marcar explícitamente el campo como renderizado:

{% do form.contenu.setRendered %}


{{ form_rest(form) }} va al final, después de representar cada campo "manualmente". Si lo está utilizando para el token CSRF, siempre puede procesarlo con:

{# Token CSRF #} {{ form_widget(form._token) }}