我正在研究Symfony2框架,我想用一个非常简单的形式(一个文本字段)创建一个简单的应用程序,并将提交的数据(使用ajax)保存在数据库上一个非常简单的表中。我的目标是每次发送和保存新的提交数据时查看和更新(在同一页面中使用ajax)整个数据库表。 这是我到目前为止所做的,我无法保存任何东西和500
DefaultController.php
...style.display='inline'
JQuery脚本
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
$item = New Item();
$form = $this->createForm(new ItemType(), $item, array('action'=>$this->generateUrl('vendor_name_simple_homepage'),'method'=>'POST'));
$form->add('Submit','submit',array('label'=>'Add'));
$form->handleRequest($request);
if ($request->isXmlHttpRequest()) {
$this->saveAction($item);
}
return $this->render('VendorNameSimpleBundle:Default:lista.html.twig',array('form' => $form->createView()));
}
public function saveAction($item){
$em = $this->getDoctrine()->getManager();
$em->persist($item);
$em->flush();
return new Response('success');
}
}
编辑:这是网络控制台输出,JS中没有错误 控制台
执行' INSERT INTO项目(itemName)时发生异常 价值观(?)' with params [null]:SQLSTATE [23000]:完整性约束 违规行为:1048栏' itemName'不能为null(500内部服务器 误差)
更新:似乎请求已成功发送但我无法访问 (或者我不知道该怎么做)因为内容请求 控制器收到此请求:
<script>
$(document).ready(function() {
$('form').submit(function(event) {
// prevents the browser from "following" the link
event.preventDefault();
var $url = $("form").attr("action");// + '.json';
var $value = $('#item_itemName').val();
$.ajax({
type: "POST",
url: $url,
data: $value,
success: function(data) {
$('ul').html(data);
}/*,
dataType: 'json'*/
});
});
});
</script>
答案 0 :(得分:1)
我认为你过度复杂了。我建议你用一种方法做所有事情,例如:
注意:这为您提供了一般的想法!
public function saveAction(Request $request)
{
if ($request->isXMLHttpRequest()) {
$data = $request->request->get('request');
$itemName = // Extract it from $data variable
$item = NewItem();
$item->setItemName($itemName);
$em = $this->getDoctrine()->getManager();
$em->persist($item);
$em->flush();
} else {
// Do something else
}
}
您还应该处理此类Catching ORM, DBAL and PDO exceptions in symfony之类的异常。还要看Symfony2cheatsheet因为你正在学习的好东西。
答案 1 :(得分:0)
在你发布确切的错误之前我不能肯定地说,但你的saveAction($item)
似乎期望一个你坚持/冲入Doctrine的对象,但看起来你似乎没有传递它。< / p>
啊,我的坏,看到你通过indexAction完成了,我建议检查你是否发布到正确的URL。在大多数浏览器中,您还可以看到XHR请求,以检查请求给您的确切错误。
修改强> 感谢您的错误,您要保存的项目是您创建的空白对象,请确保使用此行保存包含您检索到的数据的项目:
$filledinItem = $form->getData();