代码之家  ›  专栏  ›  技术社区  ›  Martin

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

  •  0
  • Martin  · 技术社区  · 6 年前

    我想在表单或请求中添加自定义数据-例如 作者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数组,然后输入作者id。如何实现?

    在拉腊维尔我会这样做的 $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 回复  |  直到 6 年前
        1
  •  1
  •   Dimitris    6 年前

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

    如果要操作数据以将其保存到数据库中,则应在模型操作代码中执行此操作

    根据上面的评论,在您验证并检查提交的表单之后,您应该执行如下操作

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

    您还可以将创建的日期设置直接移动到实体构造函数中,以避免每次都自己设置它(carbon不是必需的,您可以只传递一个普通的datatime)