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

时间:2018-07-11 07:59:57

标签: php symfony symfony4

我想在表格或请求中添加自定义数据-例如 author_id ,同时将我的帖子保存到数据库中。

我尝试通过使用以下方式做到这一点:

$request->request->set('author_id', '5');
$request->request->set('post.author_id', '5');
$request->request->set('post[author_id]', '5');

但是问题在于,当我dd($request)时,我看到以下数据:

enter image description here

所以我应该以某种方式进入post数组,然后放入author_id。如何实现?

在laravel中,我会这样$request['post']['author_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属性)?

1 个答案:

答案 0 :(得分:1)

该请求作为一种概念应被用作用户传递的值的只读包。

如果要处理数据以将其保存到数据库,则应在模型处理代码中进行处理

根据上面的评论,在确认并检查提交的表单后,您应该执行类似的操作

$post = $form->getData();
$post->setAuthor($authorId);
$post->setCreatedDate(Carbon::now());
$entityManager->persist($post);
$entityManager->flush();

您还可以将创建的日期设置直接移到实体构造函数中,以避免每次自己进行设置(不需要碳,显然可以将其传递为简单的数据时间)