Как я могу поместить данные $ _POST в таблицу базы данных? - PullRequest
0 голосов
/ 01 апреля 2019

Прошло 3 недели с тех пор, как я начал изучать Symfony 4. Я пытаюсь поместить выбранные данные из выпадающего списка в базу данных, но я не использую 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 ]

1 голос
/ 01 апреля 2019

Вы можете получить доступ к раскрывающимся данным с $_POST['user'] или можете использовать $request->request->get('user')

Чтобы сохранить данные в базе данных, вы можете создать объект (например, Опубликовать), в котором вы задаете значения, которые вы извлекаете из запроса, а затем сохраняете их.

Вы можете сделать что-то вроде этого:

 <?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
    ]);        

?>

Это всего лишь пример, который вы можете адаптировать к вашим потребностям.

0 голосов
/ 01 апреля 2019

Ваше значение должно иметь только идентификатор пользователя.Измените

<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

, который будет возвращать идентификатор пользователя.

Затем вам нужно получить пользователя через ваш репозиторий и сохранить его.

  1. Введите свой репозиторий пользователей и менеджер сущностей, указав их в аргументах вашей функции:

    публичная функция create (Request $ request, UserRepository $ repository, EntityManagerInterface $ entityManager) {

  2. сделать findOneBy:

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

  3. Установить пользователя для статьи и сохранить его

    $ article.setUser ($ user);$ EntityManager-> сохраняются ($ статьи);$ entityManager-> flush ();

PS: использование форм Symfony сделает это проще.

...