API Platform filter entity data

若如初见. 提交于 2019-12-11 17:52:43

问题


I just start to use Api platform and immediately stuck with problem how to filter data. I have entity User and i want to filter data that are present in response ( JSON API format)

{
    "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
            }
        }
    ]
}

so I want to remove e.g. User with id 3, but not use filters sent via request. I just want to set filter that will be always run when someone go to /api/users. I look to api-platform extensions but this will be applied on each request e.g. /api/trucks. So at end I just want to get something like

{
    "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
            }
        }
    ]
}

回答1:


As you pointed out, extensions are the way to go.

The applyToCollection method gets a $resourceClass parameter containing the current resource class.

So you can apply the WHERE clause only for a specific class in this method like:

public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
{
    if (User::class === $resourceClass) {
        $queryBuilder->doSomething();
    }
    // Do nothing for other classes
}


来源:https://stackoverflow.com/questions/48965324/api-platform-filter-entity-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!