Php Symfony 4 FindBy()并通过JSON返回数组
我有下面一行代码Php Symfony 4 FindBy()并通过JSON返回数组,php,symfony,doctrine,Php,Symfony,Doctrine,我有下面一行代码 $apps = $appRepositry->findBy(['user' => $user]); 然后,我通过JSON使用以下命令返回结果 $json_data[] = array( "state" => "success", "user_apps" => $apps, "total_
$apps = $appRepositry->findBy(['user' => $user]);
然后,我通过JSON使用以下命令返回结果
$json_data[] = array(
"state" => "success",
"user_apps" => $apps,
"total_registerd_apps" => count($apps),
);
我的问题是计数是正确的,但是“用户应用”数组返回空白
{
state = success;
"total_registerd_apps" = 1;
"user_apps" = (
{
}
);
}
我认为这是因为FindBy返回对象,但我不确定。有人能解释一下如何将结果转换成可以通过JSON发送的数组吗
谢谢您需要使用序列化程序将数据序列化为JSON:
您需要对组使用序列化程序 有关序列化的信息: 有关序列化组的信息:
您需要让您的对象实现JSONSerializable接口,向其添加一个jsonSerialize方法,该方法返回对象的数组表示,然后对其使用json_编码:例如Symfony还有一些工具可以提供帮助。从这里开始:出于某些原因,我使用循环处理程序。您可以使用一个简单的规范化器。
public function listAction(ParamFetcherInterface $paramFetcher, Request $request)
{
//...your code...//
$yourObjectifiedResult = $appRepositry->findBy(['user' => $user]);
$yourNormalizedResult = $this->normalizeWithCircularHandler(
$yourObjectifiedResult,
['groups']);
//Serializer will convert your result from Object to Json Array automatically. To get a specific set of data, you can use groups.
}
public function normalizeWithCircularHandler($data, $displayGroups, $normalizerCallbacks = false)
{
$encoder = new JsonEncoder();
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$normalizer = new ObjectNormalizer($classMetadataFactory);
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
if(false != $normalizerCallbacks && is_array($normalizerCallbacks)) {
$normalizer->setCallbacks($normalizerCallbacks);
}
$serializer = new Serializer([$normalizer], [$encoder]);
return $serializer->normalize($data , null, ['groups' => $displayGroups]);
}