Sonata管理员:默认情况下将过滤器设置为false



我目前正在使用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;

它是有效的,但我想知道是否有合适的解决方案来避免这两个不必要的常数?

您可以使用getFilterParameters也许:

<?php
public function getFilterParameters()
{
    $this->datagridValues = array_merge(array(
            'booleanField' => array(
                'value' => '0',
            )
        ),
        $this->datagridValues
    );
    return parent::getFilterParameters();
}

关于如何将枚举持久化到数据库中的信息太少了,但将值常量与可能的选项一起存储在类型类中是非常标准的。它没有错,只要你从不将你的选项引用为整数。

最好的解决方案是使用以下类型的sonata admin:

<?php
protected $datagridValues = [
    'read' => [
        'type' => SonataCoreBundleFormTypeEqualType::TYPE_IS_EQUAL,
        'value' => SonataCoreBundleFormTypeBooleanType::TYPE_NO,
    ]
];

最新更新