2012-08-06 7 views
9

Tengo una lista desplegable de campo de formulario personalizada para filtrar por año. Una de las cosas que quiero hacer es permitir que el usuario filtre por todos los años, que es la opción predeterminada. Estoy agregando esto como empty_value. Sin embargo, cuando presento el formulario, el valor predeterminado es el primer elemento que no es el valor vacío. El valor vacío está allí, justo encima de él en la lista. ¿Cómo configuro la página de forma predeterminada, en mi caso 'Todos' cuando la página se carga inicialmente? El código está abajo.¿Cómo se establece de forma predeterminada la opción empty_value en un tipo de campo de formulario personalizado de Symfony?

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class YearType extends AbstractType 
{ 

    private $yearChoices; 

    public function __construct() 
    { 
     $thisYear = date('Y'); 
     $startYear = '2012'; 

     $this->yearChoices = range($thisYear, $startYear); 
    } 

    public function getDefaultOptions(array $options) 
    { 
    return array(
     'empty_value' => 'All', 
     'choices' => $this->yearChoices, 
    ); 
    } 

    public function getParent(array $options) 
    { 
    return 'choice'; 
    } 

    public function getName() 
    { 
    return 'year'; 
    } 
} 

estoy haciendo mi forma de rama con un simple {{ form_widget(filter_form) }}

Respuesta

19

Trate de añadir empty_data opción de null, lo que ocurra primero. Tengo muchos campos de este tipo y se está trabajando, por ejemplo:

class GenderType extends \Symfony\Component\Form\AbstractType 
{ 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'empty_data' => null, 
      'empty_value' => "Non specificato", 
      'choices'  => array('m' => 'Uomo', 'f' => 'Donna'), 
      'required' => false, 
     ); 
    } 

    public function getParent(array $options) { return 'choice'; } 

    public function getName() { return 'gender'; } 

} 

EDITAR: Otra posibilidad (supongo) sería la configuración de preferred_choices. De esta manera, obtendrás la opción "Todos" en la parte superior. Pero no sé si se puede trabajar con nullempty_data, pero se puede cambiar empty_data a lo que usted quiere:

public function getDefaultOptions(array $options) 
    { 
    return array(
     'empty_value'  => 'All', 
     'empty_data'  => null, 
     'choices'   => $this->yearChoices, 
     'preferred_choices' => array(null)   // Match empty_data 
    ); 
    } 
+0

Hmm ... ahora funciona y no estoy seguro de por qué. Creo que tuve que borrar mi caché o algo así? Las opciones 'Todo' se mostraban en la parte superior, pero la seleccionada era 2da o algo así. Ahora está correctamente predeterminado a la opción superior. – Squazic

+0

@Squazic bien, está bien :) Tal vez es el almacenamiento en caché o tal vez no ha vuelto a cargar toda la página ... – gremo

+0

Lo he hecho funcionar agregando 'empty_value' y' empty_data' pero ahora el usuario puede omitir toda la validación requerida y enviar sin elegir ninguna de las opciones realmente válidas. – phpguru

Cuestiones relacionadas