php ApiPlatform/Symfony 6 -在自定义getter上添加搜索过滤器(不在数据库中)

eblbsuwk  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(94)

我正在做一个使用api平台2.6和symfony 6的项目。
我有一个基于我的数据库中的表的实体。我的API公开了我的表的字段。
但是我有一个特殊的需求,需要添加数据库中不存在的信息。我创建了一个自定义的getter,我将它集成到规范化组中,当从API响应时,它显示得很好。
但我想在这个字段上添加一个过滤器。

ApiFilter(
    SearchFilter::class, properties: [
    'customInformation' => 'exact',

它不起作用。
如何让Api平台将其视为我的数据库中的一个字段?
谢谢威廉

zwghvu4y

zwghvu4y1#

How to apply an ApiFilter(SearchFilter: class) to a dynamic getter of an entity? [doctrine-orm, api-platform, graphql]的副本
ApiPlatform过滤器目前只对属性起作用。你可能可以用一个自定义过滤器来完成这一任务,但我发现很难想象你需要过滤不存在的数据的情况。可能你的概念发生了变化才能完成这项工作。
根据您的评论更新:
我强烈建议你改变这个

function getEmergency(): string 
{ 
   if ( $this->createdby == 'admin' and createdAt > days + 3) { 
     return 'urgent'; 
   }
   else 
   { 
     return 'not urgent';
   }
}

像这样的事

function isUrgent(): bool 
{ 
   return  $this->createdby === 'admin' and createdAt > days + 3;
}

方法简单得多,因为只有2种可能情况。
那么对于API平台的问题,你为什么不简单地像这样过滤呢
第一个月
在你的课堂上

#[ApiFilter(SearchFilter::class, properties: ['createdBy' => 'exact'])]
#[ApiFilter(DateFilter::class, properties: ['createdAt'])]
class foo {}

查看下面链接中的语法,以更好地理解API平台的日期过滤器:?property[<after|before|strictly_after|strictly_before>]=value
https://api-platform.com/docs/core/filters/#date-filter

相关问题