• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Symfony 4.2 Serializer JSON nie pobiera grup serializacji

Object Storage Arubacloud
0 głosów
138 wizyt
pytanie zadane 7 czerwca 2019 w PHP przez Neronys Bywalec (2,090 p.)
zamknięte 7 czerwca 2019 przez Neronys

dzień dobry, 

Przychodzę dzisiaj z następującym problemem:

Mam swoją własną metodę do serializacji napisaną w serwisie. Działa lecz nie przyjmuje mi grup do serializacji. Jest też sobie metoda prosto od symfony o nazwie json która robi dokładnie to samo co moja tylko pobiera serializer z containera a nie tak jak moja. Moja ma stworzony przeze mnie obiekt serializera i na nim odpala metodę. Muszę mieć obiekt serializera z dwoma normalizerami. Czy mogę zarejestrować symfonowy serializer w services.yaml i w nim zmodyfikować obiekt serializera ? Ten defaultowy mi nie przechodzi bo potrzebujesz dodatkowo mu przekazać jedną klasę. A ten serializer w containerze jest bez tej dodatkowej opcji. 

Czy może macie jakiś pomysł jak poprawnie napisać do tego serwis. Poniżej to co mam:

class SerializerService
{
    /** @var Serializer $serializer */
    private $serializer;

    public function __construct()
    {
        $normalizers = [
            new DateTimeNormalizer([
                'datetime_format' => 'Y-m-d h:i:s'
            ]),
            new ObjectNormalizer(),
        ];

        $encoders = [
            new JsonEncoder(),
        ];

        $this->serializer = new Serializer($normalizers, $encoders);
    }

    /**
     * @param $data
     * @param int $status
     * @param array $headers
     * @param array $context
     * @return JsonResponse
     */
    public function serialize($data, int $status = 200, array $headers = [], array $context = []): JsonResponse
    {
        $json = $this->serializer->serialize($data, 'json', array_merge([
            'json_encode_options' => JsonResponse::DEFAULT_ENCODING_OPTIONS,
        ], $context));
        return new JsonResponse($json, $status, $headers, true);
    }
// PONIŻEJ FUNKCJA OGOLNIE DOSTEPNA W SYMFONY
//    protected function json($data, int $status = 200, array $headers = [], array $context = []): JsonResponse
//    {
//        if ($this->container->has('serializer')) {
//            $json = $this->container->get('serializer')->serialize($data, 'json', array_merge([
//                'json_encode_options' => JsonResponse::DEFAULT_ENCODING_OPTIONS,
//            ], $context));
//
//            return new JsonResponse($json, $status, $headers, true);
//        }
//
//        return new JsonResponse($data, $status, $headers);
//    }
}

 

komentarz zamknięcia: Rozwiązane przez autora.
komentarz 7 czerwca 2019 przez Neronys Bywalec (2,090 p.)

Można modyfikować normalizery w services.yaml w taki sposób:

  date_time_normalizer:
    class: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
    arguments:
      - {datetime_format: 'Y-m-d h:i:s'}
    public: false
    tags: [serializer.normalizer]

  object_normalizer:
    class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
    public: false
    tags: [serializer.normalizer]

 

Podobne pytania

–1 głos
1 odpowiedź 170 wizyt
pytanie zadane 10 stycznia 2020 w PHP przez niezalogowany
0 głosów
1 odpowiedź 209 wizyt
0 głosów
1 odpowiedź 251 wizyt
pytanie zadane 21 maja 2019 w PHP przez hiper007 Stary wyjadacz (11,270 p.)

92,535 zapytań

141,376 odpowiedzi

319,449 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...