symfony - 如何从 api 平台返回自定义数据?
问题描述
我是 symfony 和 api 平台的初学者。我尝试实现一个允许返回自定义数据而不是 api 平台响应的解决方案。
我尝试自定义控制器和HttpFoundation\Response但无法实现/管理它。
这是我的代码:
APP\Entity 中的 Task.php
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Controller\TaskController;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ApiResource(itemOperations={
* "get",
* "post_publication"={
* "method"="POST",
* "path"="/tasks",
* "controller"=TaskController::class,
* "read"=false,
* }
* })
* @ORM\Entity(repositoryClass="App\Repository\TaskRepository")
*/
class Task
{
/**
* @Groups("tasks")
*/
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $time;
/**
* @ORM\Column(type="string", length=255)
*/
private $priority;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
public $user;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getTime(): ?string
{
return $this->time;
}
public function setTime(string $time): self
{
$this->time = $time;
return $this;
}
public function getPriority(): ?string
{
return $this->priority;
}
public function setPriority(string $priority): self
{
$this->priority = $priority;
return $this;
}
/**
* @return mixed
*/
public function getUser()
{
return $this->user;
}
/**
* @param mixed $user
*/
public function setUser($user): void
{
$this->user = $user;
}
}
App\Controller 中的 TaskController.php
<?php
namespace App\Controller;
use App\Entity\Task;
use Symfony\Component\HttpFoundation\Response;
class TaskController extends Task
{
public function __construct()
{
}
public function __invoke(Task $data): Task
{
$result["success"] = true;
return $result;
}
}
这是我在 api/tasks 上的 post 方法后得到的答案
{
"@context": "\/api\/contexts\/Task",
"@id": "\/api\/tasks\/17",
"@type": "Task",
"user": null,
"id": 17,
"name": "string",
"time": "string",
"priority": "string"
}
这是调用端点时我想返回的答案:
{“成功”:真,“消息”:“成功发送”}
我希望它很清楚,如果没有,请告诉我,提前谢谢
解决方案
由于 Api-platform 不是为此类事情设计的,因此您必须通过隐式添加资源定义作为请求属性来欺骗它:
/**
* @Route(
* name="task",
* path="/task",
* methods={"POST","OPTIONS"},
* defaults={
* "_api_resource_class"=Task::class,
* "_api_collection_operation_name"="post"
* }
* )
* @param Task $data
* @return JsonResponse
*/
public function __invoke(Task $data): JsonResponse {
return new JsonResponse('task success json', 201);
}
推荐阅读
- c# - 如何在 C# 后面的代码中动态创建数据模板并绑定树视图分层数据
- ffmpeg - Creating video from images produces black screen video for certain image formats
- php - 以下代码用于更新用户图像。代码显示执行但数据库没有变化
- php - PHP切换对象是字符串还是数字
- intranet - 概念问题:验证是否存在两个用户
- php - PHP日期显示不同的时间
- html - 通过 node.js 和 sqlite3 验证用户名和密码
- sql - 在where子句中如何获取多个条件
- model-view-controller - TYPO3: tx_news 获取 sys_category sys_categories 用于 BE 列表中的自定义标题
- cakephp-3.0 - 条件不适用于在 cakephp 3 中使用包含的 hasMany 关联