我正在尝试使用ajax脚本将数据发送到控制器中的方法:
$("#form_enr").submit(function(ev) {
ev.preventDefault();
var ev = $("#mySelect").val();
var text =$("#form_Text").val();
console.log(text);
console.log(ev);
$.ajax({
type: "POST",
url: "{{ path('invitation_enregistrerInv')}}",
data : 'ev=' + ev + '&text=' + text,
success: function(data){
$('.portlet-body').html(data);
}
});
});
并且为了得到它我使用这种语法:
public function enregistrerInvAction()
{
$inv = new Invitation();
$em = $this->getDoctrine()->getManager();
$request = $this->get('request');
$ev = $request->request->get('ev');
$text = $request->request->get('text');
$inv->setCreatedAt(new \Datetime());
$inv->setUpdatedAt(new \Datetime());
$inv->setText($text);
$em->persist($inv);
$evenement=$em->getRepository('EvEvenementBundle:Evenement')->findById($ev);
$evenement=new Evenement();
$evenement->setInvitation($inv);
$em->persist($evenement);
$em->flush();
$this->addFlash(
'success',
'Les informations ont été enregistrées!'
);
return $this->redirect($this->generateUrl('invitation_index2'));
}
但我似乎没有用,因为我有这个错误:
使用参数执行'INSERT INTO邀请(created_at,updated_at,text)VALUES(?,?,?)'时出现异常[“2016-08-01 17:12:55”,“2016-08-01 17:12:55“,null]:
SQLSTATE [23000]:完整性约束违规:1048 Le champ'text'nepeutêtrevide(null)!!! 因为文本为空,我没有得到它
答案 0 :(得分:1)
我相信你在js方面传递了data
错误。尝试将data
更改为:
$.ajax({
(...)
data : {
ev: ev,
text: text
}
});
(您正在使用POST
方法,在此方法中您不会在查询字符串中传递参数)
编辑:
您的控制器操作应如下所示:
public function enregistrerInvAction(Request $request){
(...)
$text = $request->request->get('text');
(...)
}
您确定有效数据来自请求吗? (您可以尝试var_dump($_POST)
)
答案 1 :(得分:0)
如文档here中所述,您可以尝试:
// Better use the request passed on the controller's method signature
$request = $this->get('request');
$ev = $request->request->get('ev');
$text = $request->request->get('text');
而不是:
$request = $this->get('request');
$ev = $request->get('ev');
$text = $request->get('text');
希望这个帮助