我创建了一个自定义表单字段下拉列表,用于按年份过滤。我要做的一件事是允许用户按年份过滤,这是默认选项。我将其添加为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) }}
在 Twig 中渲染我的表单
最佳答案
尝试将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
。这样,您将在顶部获得“全部”选项。但是我不知道它是否可以与null
一起empty_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
);
}
关于symfony - 如何在自定义symfony表单字段类型中默认使用empty_value选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11834322/