如何从 api-platform return 自定义数据?
How to return custom data from api-platform?
我是 symfony 和 api 平台的初学者。我尝试实施一个允许 return 自定义数据而不是 api 平台响应的解决方案。
我尝试 custom controller and HttpFoundation\Response 但无法 implement/manage 它。
这是我的代码:
Task.php 在 APP\Entity
<?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;
}
}
TaskController.php 在 App\Controller
<?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"
}
这是 我想 return 调用端点时的答案:
{ "success": true, "message": "successfully send" }
我希望它很清楚,如果不清楚,请告诉我,提前致谢
因为 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);
}
我是 symfony 和 api 平台的初学者。我尝试实施一个允许 return 自定义数据而不是 api 平台响应的解决方案。
我尝试 custom controller and HttpFoundation\Response 但无法 implement/manage 它。
这是我的代码:
Task.php 在 APP\Entity
<?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;
}
}
TaskController.php 在 App\Controller
<?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"
}
这是 我想 return 调用端点时的答案:
{ "success": true, "message": "successfully send" }
我希望它很清楚,如果不清楚,请告诉我,提前致谢
因为 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);
}