【问题标题】:Symfony with API Platform + Form and controller带有 API 平台 + 表单和控制器的 Symfony
【发布时间】:2023-02-11 23:16:39
【问题描述】:

我已经使用经典的RegitrationController(继承自AbstractController)、RegistrationFormTypeUser实体启动了一个Symfony 6项目:

symfony console make:registration-form

我现在可以通过在我的数据库中添加新实体的表单来创建用户。

我还想使用创建一个 APIAPI平台.然后我对我的 User 模式添加了一些修改,API 正在运行,我也可以通过 API 创建用户。

我现在想知道如何正确地耦合表单/控制器和 API。实际上,为了避免重复代码并使用相同的User 模式,我想找到一种方法让我的RegistrationFormType 与 API 一起工作。另请注意,一方面我的RegitrationController 中有代码,例如,在将用户密码保存到数据库之前对其进行哈希处理。另一方面,这是通过 API 端的 UserDataPersister 实现的。

为了能够从表单和 API 创建用户,分解该代码和构建我的体系结构的良好做法是什么? (我想保留 Symfony AbstractController 提供的很酷的东西,比如 createFormhandleRequestrenderForm 等。)

我找不到同时使用 Form/Controller 和API平台.

在同一个项目中使用 Form/Controller 和 API 是不是一个坏主意?

【问题讨论】:

    标签: php api symfony api-platform.com


    【解决方案1】:

    当谈到切换到 API 平台时,您首先必须忘记您在更传统的应用程序中学到的东西:)

    创建/呈现表单和处理请求之类的事情是可能的,但请记住,您的 API 接受 application/json 而不是 application/x-www-form-urlencoded

    这完全取决于您选择的客户端代码。如果您坚持使用没有 ReactAngularVue 的更传统的形式,您将在 application/x-www-form-urlencoded 中发送数据,并且您的 API 平台需要一种方法来对其进行反规范化。

    有一篇关于该主题的官方文章:https://api-platform.com/docs/core/form-data/,但它有自己的好处(例如 CSRF 处理)

    一种更常见的方法是使用一些现代 JS 框架完全从头开始创建一个表单,然后只提交对象(JSON 格式)

    【讨论】:

    • 事实上,我想避免在这个项目中使用像 React 这样的前端框架。然后,如果我想坚持使用不错的 Symfony 功能来呈现表单/处理请求,我必须在控制器(对于表单)和数据持久化器(对于 API)中复制我的代码逻辑。这似乎不是一个好的做法,是吗?
    【解决方案2】:

    我认为这可以通过将 Form 实例用作 DTO 并使用验证器将其输入 State processor 来完成,就像在这个 Validating delete operations 示例中一样。但是,我不确定它是否可以与ApiPlatform validator一起开箱即用。可能需要编写一个可以正确处理 Form 的自定义程序。

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 2021-10-31
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多