2014-10-30 4 views
0

У меня проблема при попытке отправить форму с помощью ajax.Форма вызова с AJAX

Мой сучок:

<div class="admin_creation"></div> 


<script type="text/javascript"> 

    $('.admin_creation').ready(
    function() { 
     var id = {{ elem.id }} 
     $.ajax({ 
      data:'id='+id, 
      url: Routing.generate('creation_update'), 
      success: function(response){ 
       console.log('ok'); 
       $('.admin_creation').prepend(response); 
      }, 
      error: function(){ 
       console.log('fail'); 
      } 
     }); 
    }) 

</script> 

мой маршрут:

creation_update: 
    path: /detail/update 
    defaults: { _controller: NemiTwigBundle:Default:update } 
    options: 
     expose: true 

мой контроллер:

public function updateAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $id = $request->query->get('id'); 
    $creation = $em->getRepository('NemiTwigBundle:Creation')->findOneById($id); 

    //at this point, if i print_r($creation), there is nothing. The $id is correct. 
    //when i print($creation), the __tostring method is working and display the right 
    //name of the creation. 


    $form = $this->createFormBuilder()->add('price', 'integer') 
             ->add('submit', 'submit') 
             ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) 
    { 
     $creation->setPrice($form['price']->getData()); 
     $em->persist($creation); 
     $em->flush(); 

     return new Response(); 

     return $this->redirect($this->generateUrl('creation_detail', array('id' => $id))); 
    } 

    return $this->render('NemiTwigBundle::creation_update_form.html.twig', array('form' => $form->createView())); 
} 

форма:

<form action="{{ path('creation_update') }}" {{ form_enctype(form) }} method="POST"> 
    {{ form(form) }} 
</form> 

Моя фактическая проблема заключается в том, что мой идентификатор в контроллере - это правильный идентификатор, есть объект создания с этим идентификатором, но когда я пытаюсь загрузить это создание с помощью доктрины, он не работает (я думаю, что он не работает с частными атрибутами и методами когда я пытаюсь print($creation), метод __toString работает нормально и дает правильный результат).

редактировать: Для первого ответа,

я пытался с этим контроллером, как вы предлагаете:

public function updateAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $id = $request->query->get('id'); 
    $creation = $em->getRepository('NemiTwigBundle:Creation')->findOneById($id); 

    $form = $this->createFormBuilder($creation)->add('price', 'integer') 
             ->add('submit', 'submit') 
             ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) 
    { 
     $em->persist($creation); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('creation_detail', array('id' => $id))); 
    } 

    return $this->render('NemiTwigBundle::creation_update_form.html.twig', array('form' => $form->createView())); 

, но я получил эту ошибку:

Прогнозный аргумент типа «строка, Symfony \ Component \ Form \ ResolvedFormTypeInterface или Symfony \ Component \ Form \ FormTypeInterface "," Nemi \ TwigBundle \ Entity \ Creation "с учетом

+2

$ this-> createFormBuilder ($ creation) -> ...? кроме этого я не совсем уверен, что вы имеете в виду. Вы пытаетесь сохранить объект, но когда вы загружаете его, сохраненных данных нет? – Koalabaerchen

+0

привет, я пытаюсь обновить существующее создание. Таким образом, создание существует, и я пытаюсь обновить цену. Но когда я пытаюсь загрузить объект с помощью findById(), я не могу его распечатать (чтобы проверить, работает ли он). Но когда я пытаюсь получить доступ к публичному атрибуту или методу, он работает, так что это странно. Я обновлю свой вопрос более подробно – hadesMM

+0

@hadesMM почему бы не передать идентификатор действию обновления? Кроме того, пока вы обновляете объект, нет необходимости продолжать его, я думаю. – xurshid29

ответ

1
$form = $this->createFormBuilder($creation)->add('price', 'integer') 
             ->add('submit', 'submit') 
             ->getForm(); 

Дело в том, что в настоящее время вы создаете форму без сущности.

То, что вы в основном делаете

  1. нагрузки предприятие
  2. Создать форму
  3. поместить переменные в запросе в виде
  4. сохранить объект.

Вы не добавляете объект в форму. Если вы создаете форму с загруженным объектом, она добавляет измененные значения в объект.

+0

Здравствуйте, thx для вашего ответа, я пробовал, как вы сказали, но он все еще не работает, я могу что-то с этим пропустить:/ps: я редактирую свой вопрос с помощью нового контроллера) – hadesMM

Смежные вопросы