SYMFONY,API PLATFORM 如何向序列化对象添加编辑和显示链接
SYMFONY, API PLATFORM how to add edit and show links to the serialized object
我正在使用 SYMFONY 和 API PLATFORM 来创建 REST API。
我有一个项目实体作为 API 资源 :
class Project
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $reference;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Gedmo\Slug(fields={"reference"})
*/
private $slug;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=Type::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $type;
/**
* @ORM\ManyToOne(targetEntity=Status::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $status;
通过邮递员我得到:
我如何添加编辑和显示路由来获取像这样的序列化对象:
"hydra:member": [
{
...
"status": "/api/statuses/6",
"edit": "<a href='link_to_edit'>edit</a>", // add a link to edit
"show": "<a href='link_to_show'>show</a>" // add a link to show
},
知道我不想向实体属性添加编辑和显示或映射它们
感谢您的帮助
从技术上讲,您已经有了编辑和显示路由(如果您没有自定义它们):您只需对每个对象的 @id 字段的值发出 PUT 或 GET 请求。
如果您想向未映射的实体添加额外的 属性,您可以这样做:
/**
* @SerializedName("edit_route")
*
* @Groups({"projects:read"}))
*
* @return string
*/
public function getEditRoute()
{
return 'your_edit_route';
}
虽然我不会 return HTML 在这种领域,特别是如果你的路线不是 GET,并且使用你的应用程序 API 可能不会使用 HTML,所以你最好 return 使用最简单的值并让他们用它来做他们的事情。
我正在使用 SYMFONY 和 API PLATFORM 来创建 REST API。
我有一个项目实体作为 API 资源 :
class Project
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $reference;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Gedmo\Slug(fields={"reference"})
*/
private $slug;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=Type::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $type;
/**
* @ORM\ManyToOne(targetEntity=Status::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=false)
*/
private $status;
通过邮递员我得到:
我如何添加编辑和显示路由来获取像这样的序列化对象:
"hydra:member": [
{
...
"status": "/api/statuses/6",
"edit": "<a href='link_to_edit'>edit</a>", // add a link to edit
"show": "<a href='link_to_show'>show</a>" // add a link to show
},
知道我不想向实体属性添加编辑和显示或映射它们
感谢您的帮助
从技术上讲,您已经有了编辑和显示路由(如果您没有自定义它们):您只需对每个对象的 @id 字段的值发出 PUT 或 GET 请求。
如果您想向未映射的实体添加额外的 属性,您可以这样做:
/**
* @SerializedName("edit_route")
*
* @Groups({"projects:read"}))
*
* @return string
*/
public function getEditRoute()
{
return 'your_edit_route';
}
虽然我不会 return HTML 在这种领域,特别是如果你的路线不是 GET,并且使用你的应用程序 API 可能不会使用 HTML,所以你最好 return 使用最简单的值并让他们用它来做他们的事情。