如何使用API​​平台中的日期过滤器在两个日期之间进行过滤

时间:2019-06-06 14:56:30

标签: api symfony4 api-platform.com

我将API平台与Symfony 4一起使用,并尝试按以下说明使用日期过滤器:https://api-platform.com/docs/core/filters/

当我像这样使用过滤器.... something?_page = 1&lieferdat [after] = 2018-12-01&lieferdat [before] = 2018-12-30

hydra响应表明括号是url编码的,我认为它无法正常工作,因为我得到了所有结果而不是经过过滤的结果。 在我的实体中,我添加了DateFilter以及其他似乎正确的其他过滤器。

九头蛇回应:  “某物?lieferdat%5Bafter%5D = 2018-12-01&lieferdat%5Bbefore%5D = 2018-12-30&_page = 1”

任何人都可以解释我是否可以在请求中使用方括号或更好的方括号: 谁能为Api Platform提供有效的日期过滤器实现,以演示如何在两个日期之间进行过滤?

感谢您的建议, 最好的问候

2 个答案:

答案 0 :(得分:1)

好吧,我不知道这个解决方案是否有帮助,但这是我通常做的...首先,您的请求的 URL 应该像这样编码:

http://example.com/api/some-endpoint?availableDate.date%5Bstrictly_before%5D=2020-01-02&availableDate.date%5Bstrictly_after%5D=2020-02-04&page=1

你的实体应该像这样注释:

@ApiFilter(
  DateFilter::class,
  properties={
       "availableDate"
  }

)

还请注意,您可以像这样从嵌入对象中过滤属性:

 @ApiFilter(
  DateFilter::class,
  properties={
       "exampleProperty.embeddedProperty"
  }

)

其中“exampleProperty”是您要过滤的实体内的字段,“embeddedProperty”是另一个实体(嵌入的)中的字段名称

这是我如何在 JavaScript 中创建 URL 以发出 AJAX 请求的示例:

export const setAvailableDateURLFilters = ( pag = null, before = null, strictlyBefore = null,after = null, strictlyAfter = null) =>{
let url = "/api/available-dates?";

if(before)
    url === "/api/available-dates?" ? (url += "date%5Bbefore%5D=" + before) : (url += "&date%5Bbefore%5D=" + before);
if(strictlyBefore)
    url === "/api/available-dates?" ? (url += "date%5Bstrictly_before%5D=" + strictlyBefore) : (url += "&date%5Bstrictly_before%5D=" + strictlyBefore);
if(after)
    url === "/api/available-dates?" ? (url += "date%5Bafter%5D=" + after) : (url += "&date%5Bafter%5D=" + after);
if(strictlyAfter)
    url === "/api/available-dates?" ? (url += "date%5Bstrictly_after%5D=" + strictlyAfter) : (url += "&date%5Bstrictly_after%5D=" + strictlyAfter);
if(pag)
    url === "/api/available-dates?" ? ( url += 'page=' + pag) : (url += '&page=' + pag);

return url;

}

你的回答是对的!我只是添加一些提示和信息!希望这对某人有所帮助...干杯!

答案 1 :(得分:0)

好的,我回答了我自己的问题。 我的问题的答案:symfony api平台可以识别那些url编码的括号吗?答案是:是

在对Postman进行了反复试验后,我开始使用它。

当我订购查询反向时:

代替

something?lieferdat[after]=2019-03-01&lieferdat[before]=2019-03-31

我撤消了这个

something?lieferdat[before]=2019-03-31&lieferdat[after]=2019-03-01

有效!

唯一的是,有时如果我指定一个月,有时我会从前一个月获得1-2个值,这不是我想要的值,并且使我感到困惑。 我尝试使用

?lieferdat[strictly_before]=2019-03-31&lieferdat[strictly_after]=2019-03-01

但这并没有带来效果。

Edit2:答案很简单,在我的实体中,我定义了搜索过滤器,但未定义该过滤器可在其上使用的属性,因此它可在该实体中的所有日期属性上使用

任何帮助仍然感激不尽:)