вернуть новый ответ вернуть пустые данные - PullRequest
1 голос
/ 26 сентября 2019

В Cotroller у меня есть метод getVilla, который возвращает ответ JSON.Я получаю одну виллу по идентификатору из базы данных в переменной $villa, и это прекрасно работает.Когда я print_r($villa), у меня есть вилла со всеми данными.Но когда я нажимаю $villa в ответ с помощью json_encode: json_encode(['villa' => $villa]), вилла становится пустой ...

villa: {}
 /**
     * @Route("/ajax/{id}", name="app_post_front_ajax_villa")
     * @param $id
     * @param EntityManagerInterface $em
     * @return Response
     */
    public function getVilla($id, EntityManagerInterface $em): Response
    {

        $repository = $em->getRepository(Villa::class);
        $villa = $repository->findOneBy(['id' => $id]);

        return new Response(json_encode([
            'villa' => $villa,
        ]));
    }

1 Ответ

1 голос
/ 26 сентября 2019

Вы возвращаете ответ json из ответа, поэтому вместо него следует использовать JsonResponse:

use Symfony\Component\HttpFoundation\JsonResponse;

//...

return new JsonResponse([
            'villa' => $villa,
        ]);

Однако ваш массив содержит объект $ villa , а не массив .Поэтому вы должны либо создать новый массив из объекта villa , либо сериализовать его.

Самый простой способ - создать новый массив из виллы:

public function getVilla($id, EntityManagerInterface $em): Response
    {

        $repository = $em->getRepository(Villa::class);
        $villa = $repository->findOneBy(['id' => $id]);

        if($villa){
            $villaArray['id'] = $villa->getId();
            $villaArray['cityNameOrSomething'] = $villa->getCityName();
            //Do the same for other attribute you want to get in your json
        }else{
            $villaArray = [];
        }
        return new Response([
            'villa' => $villaArray,
        ]);
    }

Другой способ - использовать компонент serializer , чтобы вам не нужно было создавать новый массив.Просто следуйте Документации Symfony по использованию, чтобы найти тот, который вы хотите использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...