在我的Symfony 3應用程序中,我使用規範器和序列化器將結果集格式化爲JSON。默認情況下,所有的學說日期時間呈現的格式:用於json的symfony 3規範器 - 格式化所有時間戳
"maintenanceStart":{
"timezone":{"name":"Australia\/Melbourne",
"location":{"country_code":"AU","latitude":-37.81667,"longitude":144.96666,
"comments":"Victoria"}},
"offset":36000,"timestamp":1372892400}
我可以輸出這通過在正規化設置的回調在每個字段的基礎上的ISO日期格式如下:
但我想將此更改應用於全部時間戳,而不必指定每個字段。有沒有一個簡單的方法來做到這一點?
實體的定義:
/**
* @var \DateTime
*
* @ORM\Column(name="MAINTENANCE_START", type="datetime", nullable=true)
*/
private $maintenanceStart;
控制器代碼:
public function dataAction(Request $request) {
$doc = $this->get ('doctrine');
$repo = $doc->getRepository ('AppBundle:Customer');
$result = $repo->createQueryBuilder ('c')->getQuery()->getResult();
$encoder = new JsonEncoder();
$normalizer = new GetSetMethodNormalizer();
$callback = function ($dateTime) {
return $dateTime instanceof \DateTime ? $dateTime->format (\DateTime::ISO8601) : '';
};
$normalizer->setCallbacks (array (
'maintenanceStart' => $callback
));
$serializer = new Serializer (array (
$normalizer, new \AppBundle\DateTimeNormalizer()
), array (
$encoder
));
$json = $serializer->serialize ($result, 'json');
return $this->render ('default/data.json.twig', [
'data' => $json,
'base_dir' => realpath ($this->getParameter ('kernel.root_dir') . '/..')
]);
}
我試過了,但對測試'的instanceof \ DateTime' $數據線,它總是返回false。我的日期值顯示爲4個值的數組; 'country_code','latitude','longitude'和'comments' – Black
您是否嘗試更改優先級? ' - {name:serializer.normalizer,priority:10}' – magnetik
@Francis爲什麼你使用4個參數來改變時區,你可以使用時區縮寫(一個參數)。當你插入數據庫時,你將它轉換成服務器的時區。當您將它顯示給用戶時,您可以更改其偏好的全球時區。我希望這有幫助。 –