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]);
}