繁体   English   中英

您如何使 symfony make:crud 可用于 API?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM