可以将symfony表单组件与react.js一起使用吗?

时间:2019-05-20 15:46:07

标签: reactjs symfony symfony4 symfony-forms

我正在使用symfony表单组件。我的项目中有很多表格。

要完全学习表单组件,还有很长的路要走;)。 但是现在我喜欢它。

我也喜欢自动验证等等。

所以-现在我想在我的项目中学习和使用react.js。

但是,似乎没有办法像以前一样对项目使用验证和表单生成器吗?

我在那里吗?

最好的问候 迈克尔

2 个答案:

答案 0 :(得分:0)

可能不是因为您的表单是供服务器使用的:验证/显示错误/数据规范化/消毒/等等。

通常,您使用React来显示HTML并使用API​​将其连接到服务器。

答案 1 :(得分:0)

尽管在API上下文中,您将不会使用表单组件以HTML格式($form->createView()方法)来实际呈现表单,但仍然可以从其提供的所有功能中受益:验证,表单事件等等,无论是否使用API​​,我个人认为您应该在Controller突变中始终使用表单类型。

例如,使用FOSRestBundle,考虑一些简单的Controller动作,如下所示:

/**
 * @Rest\Put("posts/edit/{id}", name="posts.edit", requirements={"id"="\d+"})
 *
 * @param Post $post
 * @param Request $request
 *
 * @return Post
 *
 * @throws BadRequestException
 *
 */
public function edit(Post $post, Request $request): Post
{
    $form = $this->createForm(PostType::class, $user);
    $form->handleRequest($request);
    $form->submit($request->request->all());
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($post);
        $em->flush();

        return $post;
    }

    // Any error handling of your taste.
    // You could consider expliciting form errors.
    throw new BadRequestException();
}

请注意,当然必须创建Post实体和PostType表单。在这里我将不作详细介绍,因为在这种情况下没有什么特别要说的。

还请注意,我们不会检查表单是否已提交。在您的情况下,将表单呈现为HTML是React的工作,此操作将不会用于获取任何内容,它仅是PUT路由。这意味着到那里的任何请求都必须是一个PUT请求,其中包含要由我们的PostType处理的正确数据,在您的情况下,该请求是由React中手动构建的HTML表单提交的。

此外,稍微超出问题的范围,FOSRestBundle订阅您的操作返回的任何内容,并自动将其序列化为配置的格式(假设您使用的是JSON)。这意味着我们的操作示例可以返回两个可能的响应:

  • 状态码为200的响应,其中包含我们已序列化的帖子。 (您也可以考虑使用204,但不返回任何内容。)
  • 状态代码为400的响应,其中包含我们想要的内容(例如表单错误)。

允许我带你到FOSRestBundle's documentation