Php 如何手动将数据添加到表单/请求
我想在表单或请求中添加自定义数据-例如作者id,同时将帖子保存到数据库中 我尝试使用以下方法来实现这一点:Php 如何手动将数据添加到表单/请求,php,symfony,symfony4,Php,Symfony,Symfony4,我想在表单或请求中添加自定义数据-例如作者id,同时将帖子保存到数据库中 我尝试使用以下方法来实现这一点: $request->request->set('author_id', '5'); $request->request->set('post.author_id', '5'); $request->request->set('post[author_id]', '5'); 但问题是,当我dd($request)看到以下数据时: 所以我应该以某种方式进
$request->request->set('author_id', '5');
$request->request->set('post.author_id', '5');
$request->request->set('post[author_id]', '5');
但问题是,当我dd($request)
看到以下数据时:
所以我应该以某种方式进入post数组,然后放入作者id。如何实现这一点
在laravel中,我会这样做$request['post']['author\u id']=id代码>
我在控制器中的实际功能如下所示:
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
$request->request->set('author_id', '5');
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($post);
$entityManager->flush();
...
}
将视图中不可见的自定义数据(例如,传递用户id)添加到请求或直接添加到表单而不显示它(我不是说display:none
attribute)的最佳方法是什么?作为一个概念,请求应该用作用户传递的只读值包
如果要操纵数据以将其保存到数据库中,则应在模型操纵代码中执行此操作
根据上面的注释,在验证并检查表单提交后,您应该执行以下操作
$post = $form->getData();
$post->setAuthor($authorId);
$post->setCreatedDate(Carbon::now());
$entityManager->persist($post);
$entityManager->flush();
您还可以将创建的日期设置直接移动到实体构造函数中,以避免每次自己设置它(不需要碳,您显然可以只传递一个普通的数据时间)$request->request->set('post.author\u id','5')或$request->request->set('post[author\u id','5')不起作用,我现在已经尝试了你的两个建议。我认为对于这个问题,你需要使用transformers,如果你尝试重建包,会怎么样?-$pBag=new ParameterBag()$pBag->add(['post'=>[你的数组…],'author_id'=>5])$请求->请求=$pBag?因此,在执行$post=$form->getData之后;您只需执行$post->setAuthor($authord);嗯,是的,这是一个很好的解决方案,但我在验证方面有问题-在我的author\u id列中,我的验证不是空的,因此我无法在验证后设置author id。你的意思是在你的PostType中?作者根本不需要在您的PostType中。用户总是在做文章。表单类型应仅包括用户必须填写的字段。我的意思是,我的Post实体中有@Assert\NotBlank()
。PostType
只有标题和正文字段。您不需要该断言。authorId是一个内部控制变量,不需要作为用户输入进行验证。它应该是用户表中不可为空的manytone外键列。谢谢