Скрытое значение из представления не передается контроллеру в Symfony 3.4 - PullRequest
0 голосов
/ 23 октября 2018

Что бы я хотел: Я хочу иметь форму ответа, чтобы при нажатии на сообщение в моем форуме она добавляла форму после выбранного сообщения.И когда я отправляю форму, выбранный пост или идентификатор должен быть в форме ввода, чтобы иметь возможность сохранить новый комментарий как объект с допустимым атрибутом в Doctrine / Symfony в моем контроллере.

Что яdid: Я мог бы добавить форму после выбранного элемента с помощью Jquery.Я добавил скрытый ввод в форму с тем же именем, что и атрибут Entity (в противном случае Symfony говорил, что такой атрибут для этой сущности не определен).Formbuilder:

// other lines of codes
        $formbuilder
            ->add('Parent', HiddenType::class, array('data' => null));
// ….

Я добавил идентификатор в представление для каждого сообщения. (Идентичным идентификатором в базе данных / topicarg является мой объект, содержащий информацию сообщения)

  <button class="btn-info comment" id="{{"#{topicarg.id}"}}"> Answer this post </button> </br>

изатем я изменил скрытое значение формы с помощью Jquery, когда пользователь нажимает:

// ---------------------------------------CREATE ARGUMENTATION FORM AND PUT IT AFTER THE MAIN ARGUMENTATION
  $(".comment").click(function(){
    // Get the ID of the targeted comment in the same element
    var argtargetid =parseInt($(this).attr("id"), 10);

    // CHANGE THE HIDDEN VALUE IN THE FORM WITH THE ID OF THE TARGETED ELEMENT
    $("#formarg_Parent").val(argtargetid);

    // MOVE AND DISPLAY THE FORM
    var argblock = $(this).parent().parent().parent();
    $("#formarg").appendTo(argblock);
    $("#formarg").toggle(toggleTime);
  });

Здесь я проверил $("#formarg_Parent").val(argtargetid); с предупреждением, и он отображает число, как и ожидалось.И, наконец, в моем контроллере я пытаюсь изменить идентификатор целевого сообщения с помощью объекта, соответствующего этому идентификатору, до обработки запроса.

        $contributionid=$formarg->get('Parent')->getData();
        $topicargtarget=$this->getContribution($contributionid);
        $formarg->get('Parent')->setData($topicargtarget);
        $formarg→handleRequest($request);

Но Symfony возвращает следующее:

Ошибка типа: Аргумент 1, переданный getContribution (), должен иметь тип integer, значение NULL

Я не смог найти ошибку, так как, я проверил значение в форме с предупреждением, котороебыло удовлетворительным, поэтому он находится в форме, готовой для передачи контроллеру, я получаю его в контроллере и превращаю в объект.Но что-то не так, очевидно, в моем методе или синтаксисе.Спасибо, что уделили мне время!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я получил ответ.Я понял, что пытался извлечь данные из формы еще до того, как я ее обработал.Так что это была просто пустая форма, поэтому я всегда получал NULL.Так что я должен был сделать $contributionid=$formarg->get('Parent')->getData() после handlerequest().Единственное, что Symfony не позволяло мне сделать это, так как свойство в поле parent не было экземпляром объекта Contribution.Чтобы избежать этого, мне пришлось добавить опцию mapped => false в конструкцию моей формы, чтобы сообщить Symfony, что это свойство не нужно отображать вместе с объектом.Затем идентификатор был передан контроллеру, а не сопоставлен с объектом, и я мог изменить идентификатор в экземпляре Contribution, чтобы сохранить новый вклад (или публикацию). Так что теперь это работает! Спасибо всем за ваше времяи помочь.Это помогло мне разобраться!

0 голосов
/ 23 октября 2018

Если я вас правильно понял, то вы ищете Поле CollectionType .

3.4: https://symfony.com/doc/3.4/reference/forms/types/collection.html

Ток: https://symfony.com/doc/current/reference/forms/types/collection.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...