отправка формы с другого взгляда

1

этот вопрос может показаться немного новичком. То, что я пытаюсь сделать, - показать форму внутри представления, создать объект и отправить его.

В моем представлении списка показан список существующих объектов, и я показал новую кнопку /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,
        ));    
}

Большое спасибо за ваше время!

Теги:
view
forms
controller

1 ответ

0

В списке list.html.twig нет данных. Вы должны добавить такой код:

/.../
{% for object in objects %}
  {{ object.text }}
{% endfor %}

<div id="info">
    <button type="button" onClick="new()">New Object</button>
</div>
  • 0
    Да, у меня есть этот код чуть выше, но я его пропустил. Моя проблема с формой. Я заменяю блок <div> на форму и отправляю новый объект. Когда я отправляю объект, контроллер снова вызывается с данными объекта, и рекомендуется перенаправить меня после сохранения моего объекта, однако сохранение никогда не происходит. Я думаю, это происходит из-за неправильной проверки, но я не знаю причину.
  • 0
    Вы хотите, чтобы такая же форма отображалась в list.html.twig? Если дело обстоит именно так, вы должны передать его на экран своему контроллеру. return $this->render('AppBundle:list.html.twig', array('objects' => $objects, 'form' => $form->createView())); Естественно, вы должны построить его так же, как в newAction() . Я действительно не понимаю цель этой функциональности.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню