如何将$ _POST数据放入数据库表中?

时间:2019-04-01 12:06:48

标签: php twig symfony4

距离我开始学习symfony 4已有3周了。我试图将下拉列表中选择的数据放入数据库中,但我没有使用Form builder-数据以html输入/ twig,然后存储到变量$value中。

但是,我想知道如何将来自变量$value的数据放入所选的数据库(表User)中?我的意思是,(如果理解正确的话)当我使用表单构建器时,我应该使用ObjectManager $manager,如下所示:

$manager->persist($value);
$manager->flush();

老实说,在这种情况下,我不知道如何将数据放入数据库中。
谁能给我一个线索?

树枝

<select name="user">
    {% for user in users %}
        <option value="{{ user.idUser }},{{ user.name }}" label="{{ user.name }} {{ user.surname }}">{{ user.name }} {{ user.surname }}</option>
    {% endfor %}
</select>

<button type="submit" id="article_form_save" name="article_form[save]">ADD</button>

控制器

/**
 * @Route("/attribution", name="attribution")
 */
public function create (Request $request) {

    $users = $this
        ->getDoctrine()
        ->getRepository(User::class)
        ->findAll();


    $value = $_POST;  

    dump($value);

  return $this->render('database/Roles/attrib.html.twig', [
         'users' => $users
    ]);

2 个答案:

答案 0 :(得分:1)

您可以从$_POST['user']访问下拉数据,也可以使用$request->request->get('user')

为了将数据保存到数据库中,可以创建一个对象(例如Post),在其中设置要从请求中检索的值,然后保存它们。

您可以执行以下操作:

 <?php
 /**
 * @Route("/attribution", name="attribution")
 */
public function create (Request $request) {

    $users = $this
        ->getDoctrine()
        ->getRepository(User::class)
        ->findAll();

    $user = $request->request->get('user');

    $manager = $this->getDoctrine()->getManager();

    $post = new Post();

    $post->setUser($user); // I suppose the user property in your post is just an integer not an object

    $manager->persist($post);
    $manager->flush();
    dump($user);

  return $this->render('database/Roles/attrib.html.twig', [
         'users' => $users
    ]);        

?>

这只是一个示例,您可以根据需要进行调整。

答案 1 :(得分:0)

您的值应仅具有用户ID。更改

<option value="{{ user.idUser }},{{ user.name }}" 

<option value="{{ user.idUser }}" 

然后,您可以像这样获得用户:

$userId = $request->request->get('user'); //this will not be a user entity, but only an id

这将返回用户ID。

然后,您需要通过存储库检索用户并保存它。

  1. 通过在函数参数中进行类型提示来注入用户存储库和实体管理器:

    公共功能创建(请求$ request,UserRepository $ repository,EntityManagerInterface $ entityManager){

  2. 执行一次findOneBy:

    $ user = $ repository-> findOneBy(['id'=> $ userId]);

  3. 将用户设置为文章并保存

    $ article.setUser($ user); $ entityManager-> persist($ article); $ entityManager-> flush();

PS:使用Symfony表单将使其更加简单。