距离我开始学习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
]);
答案 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。
然后,您需要通过存储库检索用户并保存它。
通过在函数参数中进行类型提示来注入用户存储库和实体管理器:
公共功能创建(请求$ request,UserRepository $ repository,EntityManagerInterface $ entityManager){
执行一次findOneBy:
$ user = $ repository-> findOneBy(['id'=> $ userId]);
将用户设置为文章并保存
$ article.setUser($ user); $ entityManager-> persist($ article); $ entityManager-> flush();
PS:使用Symfony表单将使其更加简单。