我正在使用symfony表单组件。我的项目中有很多表格。
要完全学习表单组件,还有很长的路要走;)。 但是现在我喜欢它。
我也喜欢自动验证等等。
所以-现在我想在我的项目中学习和使用react.js。
但是,似乎没有办法像以前一样对项目使用验证和表单生成器吗?
我在那里吗?
最好的问候 迈克尔
答案 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)。这意味着我们的操作示例可以返回两个可能的响应: