我目前正在使用Sonata Admin来生成具有read
布尔字段的实体的数据网格。我想对此属性进行过滤,默认情况下将其设置为false
。
所以,我在管理员课程中添加了以下内容:
protected $datagridValues = array(
'read' => array('value' => false),
);
然而,它似乎没有用。生成的选择列表如下:
<select id="filter_read_value" name="filter[read][value]" class="span8">
<option value=""></option>
<option value="1">oui</option>
<option value="2">non</option>
</select>
我认为这是正常的,因为false的value
将为0,这是空选项。
所以,我使用了一些常量,例如:
const STATUS_READ = 1;
const STATUS_UNREAD = 2;
它有效,但我想知道是否有任何适当的解决方案可以避免这两个不必要的常量?
答案 0 :(得分:4)
您可以使用getFilterParameters:
<?php
public function getFilterParameters()
{
$this->datagridValues = array_merge(array(
'booleanField' => array(
'value' => '0',
)
),
$this->datagridValues
);
return parent::getFilterParameters();
}
答案 1 :(得分:0)
关于如何将枚举保存到数据库中的信息有点太少,但将值常量与类型类中的可能选项一起存储是非常标准的。它没有任何错误,只要你永远不会将你的选项作为整数引用。
答案 2 :(得分:0)
最好的解决方案是使用sonata-admin的类型:
<?php
protected $datagridValues = [
'read' => [
'type' => Sonata\CoreBundle\Form\Type\EqualType::TYPE_IS_EQUAL,
'value' => Sonata\CoreBundle\Form\Type\BooleanType::TYPE_NO,
]
];