2012-08-06 115 views
9

我有一个创建自定义表单域下拉列表按年筛选。我想要做的一件事是让用户过滤所有年份,这是默认选项。我将这添加为empty_value。但是,当我渲染表单时,它默认在第一个不是空值的项目上。空值就在那里,就在它的上面。当页面初始加载时,如何将页面默认设置为“全部”?代码如下。你如何默认自定义symfony表单字段类型中的empty_value选项?

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'; 
    } 
} 

我渲染我的形式树枝简单{{ form_widget(filter_form) }}

回答

19

尝试增加empty_data选项null,所以这是第一位的。我有这种类型的许多领域,它的工作,例如:

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'; } 

} 

编辑:另一种可能性(我想)将设置preferred_choices。通过这种方式,您将获得顶部的“全部”选项。但我不知道它是否能与nullempty_data工作,但你可以改变empty_data到任何你想要的:

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

嗯......现在的工作,我不知道为什么。我想我必须清除我的缓存或什么?所有选项都显示在顶部,但选定的选项是第二个或其他。现在它正确地默认为顶部选项。 – Squazic 2012-08-06 21:28:29

+0

@Squazic很好,没关系:)也许它是缓存或者你没有重新加载整个页面... – gremo 2012-08-06 21:34:03

+0

我得到这个工作,通过添加'empty_value'和'empty_data',但现在用户可以跳过所有需要的验证和提交而不选择任何实际有效的选项。 – phpguru 2015-04-01 18:56:07

相关问题