php - api-platform odm iri 引用不会被转换为 json 中的对象
问题描述
我想创建一个这样的模型。
{
"id": 7653,
"name": "Vortl 123",
"category": [
{
"name": "Electronic",
"url": "electronic",
"id": 1
}, {
"name": "Phone",
"url": "phone",
"id": 2
},
{
"name": "Mobile Phone",
"url": "mobile-phone",
"id": 3
}
}
我使用原则 odm 引用创建了文档。代码就是这些。
这是产品类。
/**
* @ApiResource
*
* @Document
*/
class Product
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
*/
public $name;
public function __construct()
{
$this->categories = new ArrayCollection();
}
/**
* @ODM\ReferenceMany(targetDocument=Category::class, inversedBy="product", cascade={"persist"}, storeAs="id")
*/
public $categories;
/**
* @return mixed
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param Category $category
*/
public function addCategory(Category $category): void
{
$this->categories->add($category);
}
public function removeCategory(Category $category): void
{
$category->product = null;
$this->categories->removeElement($category);
}
我的类别是。
/**
* @ApiResource
*
* @ODM\Document
*/
class Category
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\ReferenceOne(targetDocument=Product::class, mappedBy="categories", storeAs="id")
*/
public $product;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
*/
private $name;
/**
* @ODM\Field(type="string")
*/
private $url;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id): void
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getUrl()
{
return $this->url;
}
/**
* @param mixed $url
*/
public function setUrl($url): void
{
$this->url = $url;
}
}
它工作正常。当我可以发布类别并获取它们时。然后我发布产品并通过 iri 参考将类别添加到产品中。问题是我看到的是类别 id 而不是像这样的类别对象。
{
"@context": "/api/contexts/Product",
"@id": "/api/products/17",
"@type": "Product",
"name": "Product17",
"categories": [
"/api/categories/1",
"/api/categories/2",
"/api/categories/3"
]
}
我使用 post 方法创建类别,然后使用 post 方法创建产品。要将类别添加到产品中,我在产品的 post 方法中使用了类似 /api/categories/1 的 iri 引用。
我不明白为什么它与 iri 参考一起显示?我想要我想要的示例中那些 iri 引用的对象。谁能帮我?
解决方案
您必须至少添加一组normalizationContext
:
<?php
/**
* @ApiResource(
* normalizationContext={"groups" = {"product:read"}}
* )
*
* @Document
*/
class Product
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
* @Groups({"product:read"})
*/
public $name;
// ...
}
和Category
:
<?php
/**
* @ApiResource
*
* @Document
*/
class Category
{
// ...
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
* @Groups({"product:read"})
*/
public $name;
// ...
}
之后,您应该会看到Category
具有属性的对象$name
推荐阅读
- amazon-web-services - 私有链接是否适用于 lambda 函数?
- sql-server - 从本地管理员帐户使用 Windows 身份验证查询 SQL Server
- audio - 音频设备:Nvidia公司使用
- sqldelight - SQLDelight FTS5 插入问题
- java - Android广播接收器单元测试
- node.js - 在 Node js 中的 IBM MQ 中实现 SSL
- c++ - C++ - 字符串容量模式
- c++ - [[carries_dependency]] 是什么意思以及如何实现
- docker - 如何在 docker-compose 中使用共享卷
- javascript - 如何在 div 或自定义标签属性中调用函数