Php 如何手动将数据添加到表单/请求

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)看到以下数据时: 所以我应该以某种方式进

我想在表单或请求中添加自定义数据-例如作者id,同时将帖子保存到数据库中

我尝试使用以下方法来实现这一点:

$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外键列。谢谢