Symfony 2:如何通过AJAX将自定义类的对象传递给控制器

时间:2014-12-31 03:26:43

标签: php ajax symfony object

Ι有一个实体类,名为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调用传递对象(自定义类)或对象数组的明确方法?怎么办呢?

1 个答案:

答案 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));
}