Sonata admin:默认情况下将过滤器设置为 false?

Posted

技术标签:

【中文标题】Sonata admin:默认情况下将过滤器设置为 false?【英文标题】:Sonata admin: setting a filter to false by default? 【发布时间】:2013-08-16 17:53:32 【问题描述】:

我目前正在使用 Sonata Admin 来生成一个数据网格,其中包含一个具有 read 布尔字段的实体。我想过滤这个属性,默认设置为false

所以,我在我的 Admin 类中添加了以下内容:

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>

我想这是正常的,因为 value 为 false 将是 0,这是空选项。

所以,我使用了一些常量,例如:

const STATUS_READ = 1;
const STATUS_UNREAD = 2;

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

【问题讨论】:

【参考方案1】:

你可以使用 getFilterParameters:

<?php
public function getFilterParameters()

    $this->datagridValues = array_merge(array(
            'booleanField' => array(
                'value' => '0',
            )
        ),
        $this->datagridValues

    );
    return parent::getFilterParameters();

【讨论】:

【参考方案2】:

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

【讨论】:

其实在数据库中,它只是一个布尔值。这就是我宁愿使用false 属性的原因。【参考方案3】:

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

<?php
protected $datagridValues = [
    'read' => [
        'type' => Sonata\CoreBundle\Form\Type\EqualType::TYPE_IS_EQUAL,
        'value' => Sonata\CoreBundle\Form\Type\BooleanType::TYPE_NO,
    ]
];

【讨论】:

以上是关于Sonata admin:默认情况下将过滤器设置为 false?的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤用户可以在 Sonata Admin 中看到的实体实例

Sonata Admin MongoDB DataGrid 过滤器

Sonata Admin Bundle 中的标签

Sonata ODM Admin 自定义过滤器集

Sonata Admin - 更改过滤器值(关系字段)

Sonata Admin中每列的排序方向