默认日期过滤器在 Sonata Admin Bundle 中不起作用

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

我有一个用户列表,我尝试在

createdAt
属性上设置默认过滤器,以默认获取上个月创建的用户,而不是一次性获取所有用户。

这是我当前的尝试:

实体\用户.php

#[ORM\Column(name: 'creation_date', type: 'datetime', nullable: true)]
private ?DateTime $createdAt = null;

用户管理.php

protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
    $datagridMapper->add('createdAt', DateTimeRangeFilter::class, [
                'field_type' => DateTimeRangePickerType::class,
            ])
    ...
}

protected function configureDefaultFilterValues(array &$filterValues): void
{
    $filterValues['createdAt'] = [
        'value' => [
            'start' =>  (new \DateTime())->modify('-1 month')->format('M d, Y, h:i:s a'),
            'end' => (new \DateTime())->format('M d, Y, h:i:s a'),
        ],
    ];
}
php symfony sonata-admin sonata
1个回答
0
投票

这是一个格式问题。在秒和“am/pm”之间有一个特殊字符(Narrow No-Break Space),它破坏了整个过滤器。 我的代码最终是这样的:

protected function configureDefaultFilterValues(array &$filterValues): void
{
    $start = (new \DateTime())->modify('-1 month')->format('F j, Y, g:i:sa');
    $end = (new \DateTime())->format('F j, Y, g:i:sa');
    $filterValues['createdAt'] = [
        'value' => [
            'start' =>  (new \DateTime())->modify('-7 day')->format('M d, Y, h:i:s a'),
            'end' => (new \DateTime())->format('M d, Y, h:i:s a'),
            'start' =>  preg_replace('/(am|pm)$/', "\u{202F}\$0", $start),
            'end' =>  preg_replace('/(am|pm)$/', "\u{202F}\$0", $end),
        ],
    ];
}
© www.soinside.com 2019 - 2024. All rights reserved.