Ι有一个实体类,名为Product,如下所示:
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
}
在控制器的操作中,我从数据库中检索所有产品,以便在树枝模板中打印它们的一些属性:
$products = $repository->findAll();
return $this->render('abcNikBundle:Prod:products.html.twig', array('products' => $products));
我的问题是,当我点击一个按钮时,我希望通过AJAX调用将这个对象数组(类Product)传递回另一个动作并做一些事情。我尝试在我的twig模板中使用json_encode(),然后在我的php动作中使用json_decode()但它没有用。在我的twig模板中,我使用json_encode,如下所示:
var products = {{ products|json_encode() }};
我的AJAX功能如下所示:
$.post(Routing.generate('ajaxRoute', { prods: products }), function( data ) {
$('#ajax_result').html(data);
});
最后在我的控制器中:
public function ajaxAction(Request $request) {
$myArray = $request->get('prods');
$myArray2 = json_decode($myArray);
return new Response(var_dump($myArray2));
}
是否有通过AJAX调用传递对象(自定义类)或对象数组的明确方法?怎么办呢?
答案 0 :(得分:0)
我建议您使用JMSSerializerBundle。您可以设置需要转换的所有字段。然后你可以序列化你的对象以传递给JS:
var products = {{ products|serialize('json') }};
在控制器中反序列化:
public function ajaxAction(Request $request) {
$serializer = $container->get('jms_serializer');
$myArray = $request->get('prods');
$myArray2 = $serializer->deserialize($myArray, 'Acme\YourBundle\Entity\Product', 'json');
return new Response(var_dump($myArray2));
}