Sonata 管理员:默认将过滤器设置为 false?

问题描述 投票:0回答:3

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

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

php sonata-admin
3个回答
4
投票

您也许可以使用 getFilterParameters :

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

    );
    return parent::getFilterParameters();
}

0
投票

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


0
投票

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

<?php
protected $datagridValues = [
    'read' => [
        'type' => Sonata\CoreBundle\Form\Type\EqualType::TYPE_IS_EQUAL,
        'value' => Sonata\CoreBundle\Form\Type\BooleanType::TYPE_NO,
    ]
];
© www.soinside.com 2019 - 2024. All rights reserved.