swagger 为什么Symfony API平台忽略过滤器?

q8l4jmvw  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(126)

我正在做一个Symfony 5 + API平台项目。我仍然在与API过滤器作斗争。我在从某个控制器设置一个假的API路由之前完成了这项工作。但是,由于有一个API平台的开箱即用功能,允许这一点,我想“使”这一工作。
首先,实体过滤器被忽略了,API平台已经意识到了这一点。根据Symfony Profiler>API Platform>Resource Metadata

根据同一页面中的数据提供者选项卡:

到目前为止,我所尝试的是将@ApiFilter()注解添加到Question实体,如API documentation解释的那样:

// ...
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass=QuestionRepository::class)
 * @ApiResource(normalizationContext={"groups"={"question"}})
 * @ApiFilter(SearchFilter::class, properties={"status": "partial"})
 */
class Question
{
    // ...

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups("question")
     */
    private $status;
    
    // ...
}

我还尝试在需要过滤的属性上指定过滤器。(感谢 @EugeneRuban 从以前的问题)。
那么,为什么API Platform会忽略过滤器呢?

编辑:下面是截图:

mgdq6dx1

mgdq6dx11#

经过一段时间的调试,原来这是错误的use语句造成的。
有效的方法是:

use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;

不起作用的是:

use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;

奇怪的是,这些参数确实在Swagger中出现在最后一个错误的use语句中。但它们实际上不起作用。

相关问题