formularios form createform php symfony

php - createform - symfony 2.3 form



Creador de formularios Symfony2: elimine la etiqueta, hágala marcador de posición (11)

Estoy jugando con el generador de formularios de Symfony, y no puedo encontrar una manera de no mostrar una etiqueta. Además, estoy interesado en establecer un marcador de posición para cada cuadro de entrada. es posible? Investigué un poco y no encontré nada.

Mi forma:

<form action="{{ path(''searchPeople'') }}" method="post" class="form-inline"> {{ form_errors(form) }} {{ form_row(form.first_name) }} {{ form_row(form.last_name) }} {{ form_rest(form) }} <br /> <button type="submit" class="btn btn-primary" /><i class="icon-search"></i>Search</button> </form>

EDIT: ¡Resuelto! Todas las soluciones a continuación ayudaron, pero di la respuesta al comentario útil principal. Agradezco toda la ayuda. Para cualquier otra persona que se encuentre con esto, este es mi código de trabajo final:

<form action="{{ path(''searchPeople'') }}" method="post" class="form-inline"> {{ form_errors(form) }} {{ form_errors(form.first_name) }} {{ form_widget(form.first_name, {''attr'': {''placeholder'': ''First Name''} }) }} {{ form_errors(form.last_name) }} {{ form_widget(form.last_name, {''attr'': {''placeholder'': ''Last Name''} }) }} {{ form_rest(form) }} <br /> <button type="submit" class="btn btn-primary" /><i class="icon-search icon-white"></i>Search</button> </form>


Symfony 2.8 y superior

  1. Eliminar form_label

    {% block form_row %} <div> {{ form_errors(form) }} {{ form_widget(form) }} </div> {% endblock form_row %}

  2. Añadir un marcador de posición

    {% block form_widget_simple %} {% set type = type|default(''text'') %} <input placeholder="{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}" type="{{ type }}" {{ block(''widget_attributes'') }} {% if value is not empty %}value="{{ value }}" {% endif %}/> {% endblock form_widget_simple %}


¡Hice esto recientemente! :) Querrá crear una nueva plantilla de campos, para form_row y una para form_widget. A continuación, elimine la parte form_label y agregue su marcador de posición.

http://symfony.com/doc/current/cookbook/form/form_customization.html

Puede hacerlo por campo o configurarlo para todos.

O también puede saltarse la eliminación de form_label de la plantilla form_row, y simplemente hacer form_widget () donde está llamando a form_row ()


Ampliando la respuesta de Léo:

{% use ''form_div_layout.html.twig'' %} {% block widget_attributes %} {% spaceless %} {% set attr = attr|merge({''placeholder'': label}) %} {{ parent() }} {% endspaceless %} {% endblock widget_attributes %}

trans filtro trans ha sido eliminado porque está incluido en el padre .


Convertir etiqueta en marcador de posición

{% use ''form_div_layout.html.twig'' with widget_attributes as base_widget_attributes %} {% block widget_attributes %} {% set attr = {''placeholder'': label|trans({}, translation_domain)} %} {{- block(''base_widget_attributes'') -}} {% endblock widget_attributes %}


Debe renderizar el formulario manualmente.

Aquí hay un ejemplo:

<form id="form-message" action="{{ path(''home'') }}" method="post" {{ form_enctype(form) }}> {{ form_label(form.name) }} {% if form_errors(form.name) %} <div class="alert alert-error"> {{ form_errors(form.name) }} </div> {% endif %} {{ form_widget(form.name) }} {{ form_row(form._token) }} <input type="submit" class="btn" value="Submit"> </form>

Documentación relacionada


Para aquellos que NO usan form_row , siempre puede agregar el marcador de posición como atributo directamente al agregar la entrada al generador. Al igual que:

$task = new Task(); $form = $this->createFormBuilder($task) ->add(''first_name'', ''text'', array( ''required'' => true, ''trim'' => true, ''attr'' => array(''placeholder'' => ''Lorem Ipsum'') )->getForm();


Para resumirlo:

  • La respuesta de Titi es la más simple;

  • Las respuestas de Mick , Léo y Quolonel son las más efectivas, pero están incompletas (para symfony> 2.6):

Si usa la opción label_format en su *Type::configureOptions , su solución no funciona. Necesita agregar el contenido del bloque form_label para manejar todas las posibilidades de etiquetas. La respuesta completa y más efectiva (código utilizado w / symfony 3.3):

  1. Eliminar form_label

    {% block form_row %} <div> {{ form_errors(form) }} {{ form_widget(form) }} </div> {% endblock form_row %}

  2. Edite el bloque widget_attribute

    {% block widget_attributes %} {% spaceless %} {% if label is not same as(false) -%} {% if label is empty -%} {%- if label_format is not empty -%} {% set label = label_format|replace({ ''%name%'': name, ''%id%'': id, }) %} {%- else -%} {% set label = name|humanize %} {%- endif -%} {%- endif -%} {% set attr = attr|merge({''placeholder'': label}) %} {%- endif -%} {{ parent() }} {% endspaceless %} {% endblock widget_attributes %}

Notas :

  • No traduzca las etiquetas al bloque widget_attributes , de lo contrario, aparecerán como traducciones faltantes.

  • La solución no funciona para las casillas de verificación ni los botones de opción, querrá agregar algo como:

    {%- block checkbox_widget -%} {{ parent() }} {{- form_label(form) -}} {%- endblock checkbox_widget -%}


Sé que ya está respondido, pero podría ayudar a alguien que está buscando una solución diferente para los marcadores de posición, si no quiere cambiar nada en su plantilla ramita:

$builder->add( ''name'', ''text'', array( ''attr'' => array( ''placeholder'' => ''Your name'', ), ''label'' => false, ) );


Si está sacando el campo con form_rest, tendrá que establecer la etiqueta para el campo en falso en el generador de formularios con algo así como

$builder->add(''first_name'', ''text'', array( ''label'' => false, ));

Si imprime los campos individualmente, puede omitir form_label para ese campo en la plantilla twig o establecerlo en una cadena vacía.

{{ form_label(form.first_name, '''') }}


También puede copiar las etiquetas en el atributo marcador de posición antes de representar el formulario:

$formView = $form->createView(); foreach($formView->getIterator() as $item) { /** @var $item FormView */ if ($item->vars[''label'']) { $item->vars[''attr''][''placeholder''] =$item->vars[''label'']; } }


para otros que se encuentran con esta etiqueta-pregunta: puede usar el tema del formulario para anular la etiqueta form_row para cada forma que desee. Sin embargo, recomiendo simplemente configurarlo para la optimización del lector de página. mi ejemplo con bootstrap:

{% block form_row %} {% spaceless %} {{ form_label(form, null, {''label_attr'': {''class'': ''sr-only''}}) }} {{ form_errors(form) }} {{ form_widget(form) }} {% endspaceless %} {% endblock form_row %}

no olvides incluir tu formthetheme en config.yml y template.