【发布时间】:2014-10-30 15:45:40
【问题描述】:
当我尝试使用 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>
我的实际问题是我在控制器中的 id 是正确的 id,有这个 id 的创建实体但是当我尝试使用学说加载这个创建时,它不起作用(我认为它不适用于私有属性和方法导致当我尝试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)->...?除此之外,我不太确定你的意思。您尝试保存实体,但加载时保存的数据不存在?
-
你好,我正在尝试更新现有的创作。所以创作存在,我尝试更新价格。但是当我尝试使用 findById() 加载实体时,我无法 print_r 它(检查它是否工作)。但是当我尝试访问公共属性或方法时,它正在工作,所以很奇怪。我会用更多细节更新我的问题
-
@hadesMM 为什么不将 id 传递给更新操作?此外,当您更新实体时,我认为无需保留它。
-
这是一个 ajax 请求,我必须像以前一样传递 id,并且我需要持久化该项目以将其保存在数据库中。