1

我刚开始使用Api 平台并立即遇到如何过滤数据的问题。我有实体User,我想过滤响应中存在的数据(JSON API 格式)

{
    "links": {
        "self": "/api/users"
    },
    "meta": {
        "totalItems": 2,
        "itemsPerPage": 30,
        "currentPage": 1
    },
    "data": [
        {
            "id": "/api/users/1",
            "type": "User",
            "attributes": {
                "_id": 1,
                "username": "jonhdoe",
                "isActive": true,
                "address": null
            }
        },
        {
            "id": "/api/users/3",
            "type": "User",
            "attributes": {
                "_id": 3,
                "username": "test",
                "isActive": true,
                "address": null
            }
        }
    ]
}

所以我想删除例如3,但不使用通过请求发送的过滤器Userid我只想设置过滤器,当有人去/api/users. 我期待api-platform 扩展,但这将应用于每个请求,例如/api/trucks. 所以最后我只想得到类似的东西

{
    "links": {
        "self": "/api/users"
    },
    "meta": {
        "totalItems": 1,
        "itemsPerPage": 30,
        "currentPage": 1
    },
    "data": [
        {
            "id": "/api/users/1",
            "type": "User",
            "attributes": {
                "_id": 1,
                "username": "jonhdoe",
                "isActive": true,
                "address": null
            }
        }
    ]
}
4

1 回答 1

3

正如您所指出的,扩展是要走的路。

applyToCollection方法获取一个$resourceClass包含当前资源类的参数。

因此,您可以仅将此WHERE子句应用于此方法中的特定类,例如:

public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
{
    if (User::class === $resourceClass) {
        $queryBuilder->doSomething();
    }
    // Do nothing for other classes
}
于 2018-02-28T09:09:33.190 回答