symfony Sonata默认过滤器值

3duebb1j  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(86)

在我的方法configureDatagridFilters()中有一个名为assignee的属性。当我的管理员的列表视图第一次加载时,我想将此属性的值设置为当前用户。
我试过:

public function getFilterParameters()
{
    $parameters = parent::getFilterParameters();

    $parameters['assignee'] = [
        'value' => $this->getUser(),
    ];

    return $parameters;
}

字符串
以及代替的array_merge。它们都没有达到我想要的效果,它仍然只是向我显示默认/整个列表。
我试着添加一个类型,有点不清楚类型是什么,因为我看到的一些例子像EntityType::class,其他的只是一个数字3

jyztefdp

jyztefdp1#

所以我想出了如何将过滤器默认设置为当前用户。
我的过滤器是EntityType::class,类为User::class。为了让上面的代码片段工作,你必须将值设置为用户ID,而不是用户对象,如下所示:'value' => $this->getUser()->getId()的值。
所以完整的方法是:

public function getFilterParameters()
{
    $parameters = parent::getFilterParameters();

    $parameters['assignee'] = [
        'value' => $this->getUser()->getId(),
    ];

    return $parameters;
}

字符串

uqdfh47h

uqdfh47h2#

公认的答案是错误的。您将无法更改“收件人”过滤器-所以它不是一个“默认”,但“强制过滤器”的行为。您应该将array_key_exists检查添加到代码中,如

public function getFilterParameters()
{
    $parameters = parent::getFilterParameters();

    if (!array_key_exists('assignee', parameters)) {        
        $parameters['assignee'] = [
             'value' => $this->getUser()->getId(),
        ];
    }

    return $parameters;
}

字符串

相关问题