У меня проблема при попытке отправить форму с помощью 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 "с учетом
$ this-> createFormBuilder ($ creation) -> ...? кроме этого я не совсем уверен, что вы имеете в виду. Вы пытаетесь сохранить объект, но когда вы загружаете его, сохраненных данных нет? – Koalabaerchen
привет, я пытаюсь обновить существующее создание. Таким образом, создание существует, и я пытаюсь обновить цену. Но когда я пытаюсь загрузить объект с помощью findById(), я не могу его распечатать (чтобы проверить, работает ли он). Но когда я пытаюсь получить доступ к публичному атрибуту или методу, он работает, так что это странно. Я обновлю свой вопрос более подробно – hadesMM
@hadesMM почему бы не передать идентификатор действию обновления? Кроме того, пока вы обновляете объект, нет необходимости продолжать его, я думаю. – xurshid29