Symfony сериализует и нормализует, делая JSON несовместимым

При попытке создать функцию, сериализующую объект, превратить его в json и отправить в виде ответа http, я получаю следующую ошибку:

ContextErrorException

Примечание времени выполнения: объявление AppBundle\Controller\DefaultController::json() должно быть совместимо с Symfony\Bundle\FrameworkBundle\Controller\Controller::json($data, $status = 200, $headers = Array, $context = Array)

Я смог показать массив пользователей с помощью var_dump(); прежде чем я попытался сериализовать объект и использовать его в функции. Вот мой код:

<?php

 namespace AppBundle\Controller;

 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Serializer\Serializer;
 use Symfony\Component\Serializer\Encoder\XmlEncoder;
 use Symfony\Component\Serializer\Encoder\JsonEncoder;
 use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

 class DefaultController extends Controller
{

 public function indexAction(Request $request)
 {
   // replace this example code with whatever you need
   return $this->render('default/index.html.twig', [
   'base_dir'  =>realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
 ]);
}


 public function pruebasAction(Request $request)
 {
    $em =  $this->getDoctrine()->getManager();
    $users = $em->getRepository('BackendBundle:User')->findAll();

    return $this->json($users);

 }

 public function json($data){
    $normalizers = array(new ObjectNormalizer());
    $encoders = array(new JsonEncoder());
    $serializer = new Serializer($normalizers, $encoders);
    $json = $serializer->serialize($data, 'json');

    $response = new Response($json);
    $response->headers->set('Content-Type', 'application/json');

    return $response;

 }
}

Что делает общедоступная функция json($data){ }", чтобы портить программу?
и как мне сделать мой JSON совместимым с тем в рамках?

П.Д.: Будьте терпеливы. Я новичок с рамками

1 ответ

Я просто изменил название последней публичной функции (json для jsons), и она сработала, она дала мне читаемый вывод Json:

<?php

  namespace AppBundle\Controller;

  use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  use Symfony\Component\HttpFoundation\Request;
  use Symfony\Component\HttpFoundation\Response;
  use Symfony\Component\Serializer\Serializer;
  use Symfony\Component\Serializer\Encoder\XmlEncoder;
  use Symfony\Component\Serializer\Encoder\JsonEncoder;
  use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

  class DefaultController extends Controller
   {

   public function indexAction(Request $request)
    {
      // replace this example code with whatever you need
      return $this->render('default/index.html.twig', [
      'base_dir'   =>realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
      ]);
    }


   public function pruebasAction(Request $request)
    {
     $em =  $this->getDoctrine()->getManager();
     $users = $em->getRepository('BackendBundle:User')->findAll();

     return $this->jsons($users);

     }

     public function jsons($data){
       $normalizers = array(new ObjectNormalizer());
       $encoders = array(new JsonEncoder());
       $serializer = new Serializer($normalizers, $encoders);
       $json = $serializer->serialize($data, 'json');

       $response = new Response($json);
       $response->headers->set('Content-Type', 'application/json');

       return $response;

       }
    }
Другие вопросы по тегам