kut*_*tas 2 serialization datetime normalization symfony
我正在尝试序列化一个具有一些 \DateTime 字段的实体类。一切正常,但 \DateTime 对象使用以下格式转换为字符串:“2019-10-21T01:05:12+00:00”,而我只想获取日期部分:“2019-10-21 ”。
Symfony文档提到了默认格式,但没有解释如何配置它:
DateTimeNormalizer此规范化器将 DateTimeInterface 对象(例如 DateTime 和 DateTimeImmutable)转换为字符串。默认情况下,它使用 RFC3339 格式。
是否可以更改默认的日期时间规范化格式以及如何更改?
实体类:
class Fact
{
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @Groups({"api"})
*/
private $created_on;
}
Run Code Online (Sandbox Code Playgroud)
标准化示例:
use Symfony\Component\Serializer\SerializerInterface;
class FactController extends AbstractController
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function view($id)
{
....
$data = array(
'fact' => $this->serializer->normalize($fact, null, ['groups'=> 'api']),
);
...
}
}
Run Code Online (Sandbox Code Playgroud)
事实证明,“$context”数组被传递给每个受支持的规范化器的 normalize() 函数。内置规范化器定义它们接受的数组键及其默认值。
在我的例子中,相关的键是'datetime_format',默认为\DateTime::RFC3339。\DateTime::format()格式必须是和方法接受的格式\DateTime::createFromFormat()- 这些函数用于规范化/非规范化。
在我的例子中正确的用法是:
public function view($id)
{
....
$data = array(
'fact' => $this->serializer->normalize($fact, null, ['groups'=> 'api',
'datetime_format' => 'Y-m-d']),
);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |