этот вопрос может показаться немного новичком. То, что я пытаюсь сделать, - показать форму внутри представления, создать объект и отправить его.
В моем представлении списка показан список существующих объектов, и я показал новую кнопку /create, которая приносит форму, которая создает новый объект, вызывающий контроллер.
Я не знаю, есть ли более правильный способ сделать это, но я придумал этот код, который работает частично. Код работает, когда мой url is/new (показывается только форма), однако пока он /list не работает.
Просмотр списка (только соответствующий код):
{# AppBundle/Resources/views/list.html.twig #}
<div id="info">
<button type="button" onClick="new()">New Object</button>
</div>
<script>
function new() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("info").innerHTML = xhttp.responseText;
}
}
xhttp.open("GET", "/new", true);
xhttp.send();
}
</script>
Новый вид:
{# AppBundle/Resources/views/new.html.twig #}
{{ form(form) }}
Методы контроллера:
// AppBundle/Controller/ObjectController
public function newAction(Request $request)
{
$object = new Object();
$form = $this->createFormBuilder($object)
->add('Text', 'textarea')
->add('save', 'submit')
->getForm();
$form->handleRequest($object);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($object);
$em->flush();
return $this->redirectToRoute('list');
}
return $this->render('AppBundle:new.html.twig', array(
'form' => $form->createView(),
));
}
public function listAction(Request $request)
{
$objects = $this->getDoctrine()
->getRepository('AppBundle\Entity\Object')
->findAll();
return $this->render('AppBundle:list.html.twig', array(
'objects' => $objects,
));
}
Большое спасибо за ваше время!
В списке list.html.twig нет данных. Вы должны добавить такой код:
/.../
{% for object in objects %}
{{ object.text }}
{% endfor %}
<div id="info">
<button type="button" onClick="new()">New Object</button>
</div>
return $this->render('AppBundle:list.html.twig', array('objects' => $objects, 'form' => $form->createView()));
Естественно, вы должны построить его так же, как вnewAction()
. Я действительно не понимаю цель этой функциональности.