为什么当我使用Ajax更新实体时,控制器的请求对象不包含数据信息?
Why Request object from Controller doesn't contain data information when i used Ajax to update entity?
我尝试使用 Ajax 从表单更新 post 实体...
PostControler.php:
<?php
namespace BISSAP\ForumBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use BISSAP\ForumBundle\Entity\Post;
use BISSAP\ForumBundle\Form\PostType;
class PostController extends Controller
{
public function editAction($id)
{
...
}
public function updateAction(Request $request)
{
$id = 14;
if ($this->container->get('request')->isXmlHttpRequest()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('BISSAPForumBundle:Post')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Post entity.');
}
$editPostForm = $this->createForm(new PostType(true), $entity);
$editPostForm->handleRequest($request);
if ($editPostForm->isValid()) {
$em->flush();
return $this
->container
->get('templating')
->renderResponse('BISSAPForumBundle:Post:update.html.twig', array('post' => $entity));
}
$errorform = var_dump($editPostForm->getErrors(true));;
return $this->render('BISSAPForumBundle:Post:test.html.twig', array('output' => $output));
}
}
}
当我在 $request
中探索 var_dump
时,没有任何形式信息(例如内容或名称形式...),也许是因为这个原因 isValid()
return 错误。
部分 PostType:
$entity = $builder->getData();
$builder
->add('content', 'ckeditor', array(
'label' => 'Votre message',
'config_name' => 'edit_post',
'config' => array('language' => 'fr')))
->add('Envoyer', 'submit', array(
'attr' => array(
'class' => 'btn right-flt',
'data-id' => $entity->getId())))
;
AJAX 点击:
$(function(){
$(document).on('click', ".comment .content form button", function(e) {
var $this = $(this);
var route = $this.closest("form").attr("action");
var type = $this.closest("form").attr("method");
var id = $this.data('id');
console.log(route);
console.log(type);
$.ajax({type: type, dataType: 'html', url: route, success: function(response){
console.log(response);
$('#message-'+id).html(response);
}, error: function(jqXHR, ajaxOptions, errorThrown) {
console.log(jqXHR.status);
console.log(jqXHR.responseText);
console.log(errorThrown);
}});
return false;
});
});
澄清时刻:
- 为什么在 ajax 请求中使用数据类型:'html'?
- 我没有看到你传递给 $.ajax
的对象 'data' 属性
- 我没有长时间使用 PHP 和 JS,但我记得我使用 jQuery 方法序列化表单,然后将其传递给 ajax 对象到数据部分,dataType我被设置为 json.
希望这对你有所帮助:)
向 ajax 调用添加数据可以解决此问题
$.ajax({
type:"type",
url: "url",
data: $("form").serialize()
});
我尝试使用 Ajax 从表单更新 post 实体...
PostControler.php:
<?php
namespace BISSAP\ForumBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use BISSAP\ForumBundle\Entity\Post;
use BISSAP\ForumBundle\Form\PostType;
class PostController extends Controller
{
public function editAction($id)
{
...
}
public function updateAction(Request $request)
{
$id = 14;
if ($this->container->get('request')->isXmlHttpRequest()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('BISSAPForumBundle:Post')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Post entity.');
}
$editPostForm = $this->createForm(new PostType(true), $entity);
$editPostForm->handleRequest($request);
if ($editPostForm->isValid()) {
$em->flush();
return $this
->container
->get('templating')
->renderResponse('BISSAPForumBundle:Post:update.html.twig', array('post' => $entity));
}
$errorform = var_dump($editPostForm->getErrors(true));;
return $this->render('BISSAPForumBundle:Post:test.html.twig', array('output' => $output));
}
}
}
当我在 $request
中探索 var_dump
时,没有任何形式信息(例如内容或名称形式...),也许是因为这个原因 isValid()
return 错误。
部分 PostType:
$entity = $builder->getData();
$builder
->add('content', 'ckeditor', array(
'label' => 'Votre message',
'config_name' => 'edit_post',
'config' => array('language' => 'fr')))
->add('Envoyer', 'submit', array(
'attr' => array(
'class' => 'btn right-flt',
'data-id' => $entity->getId())))
;
AJAX 点击:
$(function(){
$(document).on('click', ".comment .content form button", function(e) {
var $this = $(this);
var route = $this.closest("form").attr("action");
var type = $this.closest("form").attr("method");
var id = $this.data('id');
console.log(route);
console.log(type);
$.ajax({type: type, dataType: 'html', url: route, success: function(response){
console.log(response);
$('#message-'+id).html(response);
}, error: function(jqXHR, ajaxOptions, errorThrown) {
console.log(jqXHR.status);
console.log(jqXHR.responseText);
console.log(errorThrown);
}});
return false;
});
});
澄清时刻:
- 为什么在 ajax 请求中使用数据类型:'html'?
- 我没有看到你传递给 $.ajax 的对象 'data' 属性
- 我没有长时间使用 PHP 和 JS,但我记得我使用 jQuery 方法序列化表单,然后将其传递给 ajax 对象到数据部分,dataType我被设置为 json.
希望这对你有所帮助:)
向 ajax 调用添加数据可以解决此问题
$.ajax({
type:"type",
url: "url",
data: $("form").serialize()
});