[英]How do you make symfony make:crud available for API's?
在 symfony 中,您可以使用命令make:crud 。 这与 symfony 中的 forms 和 twig 配合得很好。 但是有没有办法用api来做到这一点? 我将发送一个 POST 到注释的路由。
就像在 python 中一样;
url = 'https://127.0.0.1:8000/players/new'
myobj = {
'postName': 'postData',
}
当我想测试 POST 时,使用这个 python 代码。
这是我使用的一个make:crud的一部分,只显示了 CRUD 的新 function。 这仅适用于 forms。 我不能直接向它发送 POST(例如,python)。
/**
* @Route("/players/new", name="players_new", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$player = new Players();
$form = $this->createForm(PlayersType::class, $player);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($player);
$entityManager->flush();
return $this->redirectToRoute('players_index');
}
return $this->render('players/new.html.twig', [
'player' => $player,
'form' => $form->createView(),
]);
}
根据官方文档,API 平台是一个“功能强大但易于使用的全栈框架,专用于 API 驱动的项目”。 API 平台可帮助开发人员显着加快开发过程,构建复杂且高性能的超媒体驱动 API。
It ships with Symfony 4, the Doctrine ORM, a dynamic Javascript admin created with React, and React Admin, Varnish Cache server, Helm Chart to help deploy the API in a Kubernetes cluster and a Progressive Web Application skeleton. 它还包括一个 Docker 设置,用于提供 Nginx 服务器以运行 API 和 Z686155AF75A60A0F6EZF7D08 应用程序。 最鼓舞人心的是API平台在OpenAPI支持下原生生成项目文档的能力!
在本教程中,我将带您了解如何使用 CRUD 操作创建一个简单的存储桶列表 API。 先决条件
PHP - Version 7.0 or higher.
Docker
Postgres
入门
请按照以下说明设置您的开发环境:
$ mkdir demo-app
$ cd demo-app
下载最新的compressed.tar.gz 发行版。 然后将其提取到我们的工作目录中并运行以下命令:
$ cd api-platform-2.4.5
$ docker-compose pull
$ docker-compose up -d
docker-compose pull 命令下载 docker-compose.yml 文件中指定的所有图像。 为了启动容器,运行 docker-compose up -d。 -d 标志以分离模式运行容器,这意味着它们在后台运行。 为了查看容器日志,您可以在单独的终端中运行此命令 docker-compose logs -f。
我稍微更改了您的端点,使其对 API 更友好。 在我构建的所有面向公众的 API 中,它们都返回 JSON。 这只是减轻了实施的负担。 我总是将状态 201 用于创建,400 用于错误请求。 这为 RESTful API 范例和实现提供了传统角色。
/**
* @Route("/players/{player}", name="get_player", methods={"GET"})
*/
public function getPlayer(Player $player): Response {
// You might need to tweak based on your Entity name
return new JsonResponse($player);
}
/**
* @Route("/players/new", name="players_new", methods={"POST"})
*/
public function newPlayer(Request $request): Response
{
$player = new Players();
$form = $this->createForm(PlayersType::class, $player);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($player);
$entityManager->flush();
} catch (\Exception $e) {
// Probably a better exception to catch here, log it somewhere
throw $e;
}
return new JsonResponse('', Response::HTTP_CREATED);
}
return new JsonResponse(
'Invalid data provided to API, please refer to documentation',
Response::HTTP_BAD_REQUEST
);
}
将方法从new
更改为newPlayer
已完成,因为名为new
的方法在未来会令人困惑。 我还想指出的一件事是,使用 Doctrine 最好让您的实体为单数。 示例: Player
而不是Players
。 您可以让关系成为实体内的players
。
实体Game
可能有$players
,这是与 OneToMany Player
实体的关系。
在刷新时捕获异常是那里的良好标准做法。 记录后,您还应该返回一个有意义的 JsonResponse。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.