CHR*_*COM 5 api symfony api-platform.com
我正在寻找一种解决方案来根据为空的参数(用户)恢复 get 中的数据:
{
"@context": "\/api\/contexts\/ShippingCost",
"@id": "\/api\/shipping_costs",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "\/api\/shipping_costs\/1",
"@type": "ShippingCost",
"id": 1,
"minWeight": 0,
"maxWeight": 251,
"france": 4.87,
"domTom": 4.21,
"aerial": 3.84,
"zone": {
"@id": "\/api\/zones\/1",
"@type": "Zone",
"id": 1,
"name": "Guadeloupe",
"TaxFOB": 35,
"TaxSurete": 0.2,
"TaxFuel": 0.77,
"TaxGuerre": 0.24,
"Lta": 0,
"InfoDouane": 24,
"CreditEnlevement": 0,
"EntreposageCci": 0.4,
"EntreposageCciMin": 15,
"RemiseDoc": 43,
"Surete": 0,
"AvanceFond": 0,
"Tid": 13,
"Spia": 10,
"InterTransite": 50
},
"user": null
},
{
"@id": "\/api\/shipping_costs\/162",
"@type": "ShippingCost",
"id": 162,
"minWeight": 0,
"maxWeight": 250,
"france": 3,
"domTom": 5,
"aerial": 4,
"zone": {
"@id": "\/api\/zones\/4",
"@type": "Zone",
"id": 4,
"name": "Guyane",
"TaxFOB": 30,
"TaxSurete": 0.2,
"TaxFuel": 0.77,
"TaxGuerre": 0.24,
"Lta": 34.1,
"InfoDouane": 24,
"CreditEnlevement": 0,
"EntreposageCci": 0.4,
"EntreposageCciMin": 6,
"RemiseDoc": 34.5,
"Surete": 0,
"AvanceFond": 0,
"Tid": 0,
"Spia": 0,
"InterTransite": 10
},
"user": "\/api\/customers\/153"
},
Run Code Online (Sandbox Code Playgroud)
目前它检索表中的所有数据,而我只想在 GET 中恢复 user = null 的所有数据
您知道 API 平台需要哪些参数才能执行此操作吗?
我的实体:
/**
* @ApiResource(
* attributes={"pagination_enabled"=false},
* collectionOperations={
* "get"={
* "method"="GET",
* "normalization_context"={"groups"={"shippingGet", "shippingGetCollection"}},
* "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')"
* },
* "getCustomPrices"={
* "method"="GET",
* "normalization_context"={"groups"={"shippingGetCustomPrice"}},
* "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')",
* "path"="/shipping_costs/{userId}/customPrices",
* "route_name"="get_shipping_costs_userid",
* "controller"="App\Controller\ShippingCostsController",
* "swagger_context" = {
* "parameters" = {
* {
* "name" = "userId",
* "in" = "query",
* "description" = "ID customer",
* "type" : "string",
* }
* }
* }
* },
* "post"={
* "method"="POST",
* "normalization_context"={"groups"={"shippingPost"}},
* "access_control"="is_granted('ROLE_ADMIN')"
* }
* },
* itemOperations={
* "getItem"={
* "method"="GET",
* "normalization_context"={"groups"={"shippingGet", "shippingGetItem"}},
* "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')"
* },
* "delete"={
* "method"="DELETE",
* "normalization_context"={"groups"={"shippingDelete"}},
* "access_control"="is_granted('ROLE_ADMIN')"
* },
* "put"={
* "method"="PUT",
* "normalization_context"={"groups"={"shippingPost"}},
* "access_control"="is_granted('ROLE_ADMIN')"
* }
* }
* )
* @ORM\Entity(repositoryClass="App\Repository\ShippingCostRepository")
*/
class ShippingCost
{
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
Met*_*ass 12
“存在过滤器允许您根据可为空的字段值选择项目。”
您可以将存在过滤器添加到实体类中,如下所示:
// ..
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\ExistsFilter;
/**
* @ApiResource(
* ..
* )
* @ApiFilter(ExistsFilter::class, properties={"user"})
*/
class ShippingCost
Run Code Online (Sandbox Code Playgroud)
然后你可以用类似的方法来获取它们:
https://localhost:8443/api/shipping_costs?exists[用户]=false。
过滤器在所有 collectionOperations 的默认 DataProvider 上工作,使用带有 @ApiFilter 标记的实体类型的 GET 方法。它是否也适用于您的操作“getCustomPrices”取决于您的控制器使用提供的数据的情况。但因为它在你的 ApiResource 标签中的配置不包含“read”= false 我猜它是包含的。