我创建了一个自定义表单字段下拉列表,按年份进行过滤.我想做的一件事是允许用户过滤所有年份,这是默认选项.我将此添加为空值.但是,当我呈现表单时,它默认在第一个不是空值的项目.空值在那里,就在列表的上方.在页面初始加载时,如何使页面默认为“All”?代码如下.
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 ); }