Bru*_*pha 4 serialization symfony deserialization
假设我有一堂课
class MyObj
{
/** @var int */
private $myProp;
public function getMyProp(): int
{
return $this->myProp;
}
public function setMyProp(int $myProp): self
{
$this->myProp = $myProp;
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想反序列化以下
$body = '{"myProp": "4"}';
$myObj = $serializer->deserialize($body, MyObj::class, 'json');
Run Code Online (Sandbox Code Playgroud)
我显然收到一个错误,说类型不匹配。
类“MyObj”的“myProp”属性的类型必须是“int”(给出的“string”)之一。
我可以配置序列化程序来对这些值进行类型转换吗?
ObjectNormalizer 有一个选项可以在非规范化时禁用类型强制,您可以通过上下文参数传递该选项。
# ...
$myObj = $serializer->deserialize(
$body,
MyObj::class,
'json',
['disable_type_enforcement' => true]
);
# ...
Run Code Online (Sandbox Code Playgroud)
由于您在 setter 中使用类型提示,php 将尝试将给定值转换为 int。