提问人:Timothy 提问时间:8/18/2022 最后编辑:brombeerTimothy 更新时间:8/20/2022 访问量:817
希望通过从数据库对象获取来返回 Json 格式的数据。Php 交响乐
Want to return data in Json format by getting from database Object. Php Symfony
问:
我正在从数据库模型中获取数据并希望以 json 格式返回,但它返回空数组,但是当我对包含对象数据的变量使用 dump 时,它会返回实际数据。
下面是从对象获取数据的代码
$user = $this->getUser();
$bookings = $this->getDoctrine()->getRepository(Trip::class)
->findBy(['customer' => $user], ['id' => 'DESC']);
在这里,我以JSON形式返回它
return new JsonResponse(['bookings' => $bookings]);
它在屏幕上显示该数组为空。
我用DD来检查数据是否传来
$user = $this->getUser();
$bookings = $this->getDoctrine()->getRepository(Trip::class)
->findBy(['customer' => $user], ['id' => 'DESC']);
dd($bookings);
它返回
请帮助我解决如何克服这个问题
答:
0赞
Dylan KAS
8/18/2022
#1
你可以使用 symfony 组件 Serializer
你可以把你的对象数组变成一个数组的数组:
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
$serializer = new Serializer([new ArrayDenormalizer(), new DateTimeNormalizer(), new ObjectNormalizer(
null,
null,
null,
new ReflectionExtractor()
),],[ new JsonEncoder(),]);
$bookings = $this->getDoctrine()->getRepository(Trip::class)
->findBy(['customer' => $this->getUser()], ['id' => 'DESC']);
$array = $serializer->normalize($bookings, 'array');
或者你可以使用 serialize 方法直接获取 json:
$json= $serializer->serialize($bookings, 'json');
如果您的实体具有循环引用,您可以查看文档来处理它。
一种方法是添加一个关于如何处理对象的回调方法,但最好阅读文档,因为解决方案可能因实体而异。
0赞
Nirina-aj
8/20/2022
#2
Yes 为空json_encode因为支持的数组或对象属性是公共的,您可以在此处看到。 所以你必须解析$bookings。
JsonResponse使用json_encode你可以看到
例:
$array = [];
$arrayBooking = [];
foreach ($bookings as $booking) {
$arrayBooking['id'] = $booking->getId();
$arrayBooking['toPlace'] = $booking->getToPlace();
$array[] = $arrayBooking;
}
return new JsonResponse($array);
或者,您使用序列化程序 symfony 组件,如上所述。
评论
return new JsonResponse($bookings);