Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Inicializar el value de un select en 1 y no en 0 en un formulario de Symfony

7 de mayo de 2015

Hola:

El titulo de la pregunta puede pareer un poco confuso pero creo que se entiende. Mi problema es el siguiente. tengo este choice en mi formulario:

->add('limite','choice',['label'=>$this->translator->trans('menus.form.limit'),
                                     'choices' => range(1, 10)])

En twig el value empieza en 0 por lo que cuando se muestra una opcion me lo muestra una opcion adelantada(si tiene 1 me mestra 2). Yo quiero que el value empieze en 1 o en su defecto que el value sea igual a la opcion y no se como hacerlo.

Un saludo


Respuestas

#1

Buenas, para hacer que los índices y valores sean igual puedes hacer lo siguiente:

$values = range(1, 10);
$choices = array_combine($values, $values);
 
// ...
 
->add('limite','choice',[
   'label'=>'menus.form.limit',
   'choices' => $choices,
]);

La funcion array_combine de php crea un nuevo array, donde los índices son los valores del array pasado como primer argumento (en tu caso 1, 2, 3, ..., 10) y los valores son los elementos del segundo array pasado a la función (nuevamente 1, 2, 3, ..., 10).

Por otro lado, no hace falta que traduzcas el label directamente en el FormType. Symfony por defecto traduce todos los labels desde los propios archivos Twig, por lo que con solo pasar una etiqueta al label, automáticamente se mostrará la traducción en la vista.

Saludos!

@manuel_j555

7 mayo 2015, 14:15
#2

Gracias por la socución!. Lo de las traduciones lo hago asi porque uso la misma plantilla para todos los formularios y los muestro con un bucle y así ahorro tiempo.

{{ form_start(form) }}
<div class="box-body clearfix">
   {% for field in form.children if (field.vars.name != '_token') %}
   <div class="form-group {% if not field.vars.valid %}has-error{% endif %}">
      {% set field_label = entity_fields[field.vars.name]['label']|default(null) %}
      {{ form_label(field, field_label, { label_attr: { class: 'col-sm-12 control-label' } }) }}
      <div class="col-sm-12">
         {{ form_widget (field,{'attr':{'class':'form-control'}}) }}
         {%  if form_errors(field)  %}
         <div class="alert alert-danger fade in">
            <a data-dismiss="alert" class="pull-right" href="" type="button">
            <i class="fa fa-times"></i>
            </a>
            <strong>Error</strong><br>
            {{ form_errors(field)}}
         </div>
         {%  endif %}
      </div>
   </div>
   {% endfor %}
</div>
<div class="box-footer clearfix">
   <button type="submit" class="btn btn-success pull-right" value="Submit" >{{ saveEntity | trans }}</button>
</div>
{{ form_rest(form) }}
{{ form_end(form) }}

@TsubasaAkai

7 mayo 2015, 15:12
#3

No importa que uses la misma plantilla, el bloque Twig que muestra el label hace igualmente la traducción por tí:

Ver plantilla form_div_layout.html.twig de Symfony 2.7

Te recomiendo que leas sobre los temas de formulario, hacen lo mismo que intentas hacer y te ahorrarán mucho trabajo de diseño más adelante: Tutorial sobre los temas de formularios de Smyfony

Saludos!

@manuel_j555

7 mayo 2015, 16:15