我正在努力修改网页中的实体(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
的转换错误,然后我变成了所需类型的对象
这就是它^^
答案 0 :(得分:0)
Symfony2有一些用于序列化和反序列化实体的有用类。
这是如何进行的:
对于第一个操作(规范化您的实体),Symfony2中内置了两种可能性:
在控制器中(或您将定义的服务中),您将执行以下操作来对您的实体进行编码:
$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');