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
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
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
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