Чего бы я хотел: Я хочу иметь форму ответа, чтобы при нажатии на сообщение в моем форуме форма добавлялась после выбранного сообщения. И когда я отправляю форму, выбранная запись или идентификатор должны быть во входных данных формы, чтобы иметь возможность сохранять новый комментарий как объект с допустимым атрибутом в Doctrine / Symfony в моем контроллере.
Что я сделал: Я мог бы добавить форму после выбранного элемента с помощью 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 (), должен иметь целочисленный тип, задано значение null
Я не смог найти ошибку, так как для меня я проверил значение в форме с предупреждением, которое было удовлетворительным, поэтому оно находится в форме, готовой для передачи контроллеру, я получаю ее в контроллере и меняю на объект , Но что-то явно не так в моем методе или синтаксисе. Спасибо, что помогли мне!
2 ответа
Я получил ответ. Я понял, что пытался извлечь данные из формы, еще до того, как обработал их. Так что это была просто пустая форма, поэтому я всегда получал NULL. Так что мне пришлось сделать $contributionid=$formarg->get('Parent')->getData()
после handlerequest()
. Единственное, что Symfony не позволяла мне делать это, поскольку свойство в родительском поле не было экземпляром объекта Contribution. Чтобы избежать этого, мне пришлось добавить опцию mapped => false
в конструкцию моей формы, чтобы сообщить symfony, что это свойство не нужно отображать с объектом. Затем идентификатор был передан контроллеру, а не сопоставлен с объектом, и я мог изменить идентификатор в экземпляре Contribution, чтобы сохранить новый Contribution (или сообщение) Итак, теперь это работает! Спасибо всем за ваше время и помощь. Это помогло мне во всем разобраться!
Если я вас правильно понял, вам нужно Поле CollectionType .
3,4 : https://symfony.com/doc/3.4/reference/forms/ типы / collection.html
Текущий: https://symfony.com/doc/current/reference/forms/ типы / collection.html
Похожие вопросы
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.