2016-04-05 8 views
4

In meinem Projekt habe ich eine Entität mit createdAt Spalte. Symfony 3 - DateTime-Objekt automatisch serialisieren

fos_rest: 
    disable_csrf_role: ROLE_API 
    param_fetcher_listener: true 
    body_listener: true 
    format_listener: 
     rules: 
      - { path: '/', fallback_format: json, prefer_extension: false } 
    routing_loader: 
     default_format: json 
     include_format: false 
    view: 
     view_response_listener: force 

ich wählen mache aus Datebase in AcmeRepository

:

public function methodName() 
{ 
    $qb = $this->createQueryBuilder('d'); 
    $s = $qb->select('d.createdAt']); 

    return $s->getQuery()->getArrayResult(); 
} 

Und in Folge, in meinem Controller:

//... 
class Acme 
{ 
    /** 
    * @var DateTime 
    * 
    * @ORM\Column(name="created_at", type="datetime") 
    */ 
    protected $createdAt; 
} 

Ich habe FOSRestBundle mit Symfony Serializer aktiviert

$res = $em->getRepository('AppBundle:Acme')->methodName(); 
return $res; 

Es ist kehrt json, aber statt [{"created_at": "2016-04-04 12:13:13"}] ich bin dies immer:

[{"created_at":{"timezone":{"name":"UTC","location":{"country_code":"??","latitude":0,"longitude":0,"comments":""}},"offset":0,"timestamp":1459769277}] 

Wie kann ich dieses Problem beheben?

Antwort

4

Sie können das Format des für das FOS-REST-Modul definierten Typs mit der entsprechenden Anmerkung Typ angeben (siehe Dokument here). Als Beispiel:

use JMS\Serializer\Annotation\Type as JMS; 

class Acme 
{ 
    /** 
    * @var DateTime 
    * 
    * @ORM\Column(name="created_at", type="datetime") 
    * @JMS\Type("DateTime<'Y-m-d'>") 
    */ 
    protected $createdAt; 
} 

Hoffnung diese Hilfe

+0

Vielleicht sind Sie mit dem Symfony Serializer bekannte Lösung? –

+0

Ein Beispiel für das deserializing Datetime-Objekt mit der Symfony-Serializer-Komponente finden Sie [hier] (http://symfony.com/doc/current/components/serializer.html#using-callbacks-to-serialize-properties-with-object -instances) im doc – Matteo

+0

auch [this] (http://stackoverflow.com/a/33149890/2270041) scheint eine gute Lösung! – Matteo