在控制器中获取json答案

时间:2012-06-13 07:49:48

标签: jquery symfony

我正在努力修改网页中的实体(Symfony没有异常:))。我目前有一个应该被修改的实体。我使用Jeditable执行该版本,而不是在版本之后立即修改实体,我将修改后的元素存储在json中,当用户确认其修改时(通过模态对话框确认操作),我将该JSON发送到我的控制员。

当事情变得更糟时^^

我检查过我的json数组包含正确的信息。但是当我拦截请求时,在控制器中,它似乎并不包含我想要的内容。这是我的控制器:

public function postorganisationAction(){
    $modifFields = array();
    $content = $this->get("request")->getContent();
    $this->get('logger')->info('request123456 ');
    if (!empty($content))
    {
        $modifFields = json_decode($content, true);
        $repository = $this->getDoctrine()
               ->getEntityManager()
               ->getRepository('MyBundle:Organisation');
        $organisation = $repository->findById($modifFields["id"]);
        $organisation->setFromArray($modifFields);

        $em = $this->getDoctrine()->getEntityManager();

        $em->persist($organisation);

        $em->flush();
    }

} 

setFromArray函数获取一个包含"name" => "newname"

等元素的数组

当我尝试记录请求,内容或$modifFields["id"]时(正如我所说,我检查了JSON中的ID在jquery中是正确的),日志不会出现。

任何人都知道我做错了什么?

编辑:

经过一些修改(感谢ManseUK),我能够:
- 获取jQuery函数以发送JSON字符串而不是数组(JSON.stringify(oModifFields);
- 解决问题:我遇到了$organisation的转换错误,然后我变成了所需类型的对象

这就是它^^

1 个答案:

答案 0 :(得分:0)

Symfony2有一些用于序列化和反序列化实体的有用类。

这是如何进行的:

  1. 定义一种将实体规范化为数组的方法,数组的每对键/值都将是json字符串中的键/值;
  2. 导入一个序列化程序,它将您的数组(规范化的实体)转换为json字符串,XML Document或任何您想要的。
  3. 对于第一个操作(规范化您的实体),Symfony2中内置了两种可能性:

    • 在您的实体上实现Symfony \ Component \ Serializer \ Normalizer \ NormalizableInterface。您将必须填充两个方法,这些方法将规范化或非规范化为您希望在json中看到的属性的数组;
    • 创建自己的Normalizer类,它将实现Symfony \ Component \ Serializer \ Normalizer \ NormalizerInterface

    在控制器中(或您将定义的服务中),您将执行以下操作来对您的实体进行编码:

    $serializer = new Symfony\Component\Serializer\Serializer(
           array(
              new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
              new YourOwnCustomNormalizer() //if you created your own custom normalizers
           ), 
           array(
              'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
           )
        );
    $json = $serializer->serialize($yourEntity, 'json');
    return new Response($json);
    

    从json字符串中检索实体:

    $jsonString = $content = $this->get("request")->get('yourString'); //please, check how you retrieve data from your request
    $serializer = new Symfony\Component\Serializer\Serializer(
           array(
              new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
              new YourOwnCustomNormalizer() //if you created your own custom normalizers
           ), 
           array(
              'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
           )
        );
    $entity = $serializer->deserialize($jsonString, '\namespace\to\your\entity', 'json');