为什么 JMS 会更改我的 Doctrine Entity 布尔值?
Why is JMS changing my Doctrine Entity boolean values?
这是我第一次需要提问 - 我通常都能找到答案..
我可以使用 JMS 序列化程序在 JSON 和 Doctrine 实体之间进行转换。我唯一的问题是,当我从 JSON 反序列化回实体时,任何错误的布尔值:JSON 中的 "boolean_value":false
将在 Doctrine 实体中设置为 true
。
我已将范围缩小到 JMS 序列化程序。此代码中的数据已更改。
public function toEntity($entity_name, $input, $inputFormat = 'json') {
// $input is a json string where "boolean_value":false
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($json, $entity_name, $inputFormat);
// the output entity's $boolean_value is now true
// $entity->getBooleanValue() === true
return $entity;
}
如果您还需要什么,请告诉我。
事实证明 json_decode 不会将 'true' 或 'false' 的字符串值转换为 true
或 false
,因此代码检查是否字符串值为 true|false。
我更新了我的 toEntity 方法来解决这个问题。
public function toEntity($entity_name, array $input, $inputFormat = 'json') {
foreach ($input as $k => $v) {
if ($v == 'true' || $v == 'false') {
$input[$k] = filter_var($v, FILTER_VALIDATE_BOOLEAN);
}
}
$input = json_encode($input);
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($input, $entity_name, $inputFormat);
return $entity;
}
这是我第一次需要提问 - 我通常都能找到答案..
我可以使用 JMS 序列化程序在 JSON 和 Doctrine 实体之间进行转换。我唯一的问题是,当我从 JSON 反序列化回实体时,任何错误的布尔值:JSON 中的 "boolean_value":false
将在 Doctrine 实体中设置为 true
。
我已将范围缩小到 JMS 序列化程序。此代码中的数据已更改。
public function toEntity($entity_name, $input, $inputFormat = 'json') {
// $input is a json string where "boolean_value":false
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($json, $entity_name, $inputFormat);
// the output entity's $boolean_value is now true
// $entity->getBooleanValue() === true
return $entity;
}
如果您还需要什么,请告诉我。
事实证明 json_decode 不会将 'true' 或 'false' 的字符串值转换为 true
或 false
,因此代码检查是否字符串值为 true|false。
我更新了我的 toEntity 方法来解决这个问题。
public function toEntity($entity_name, array $input, $inputFormat = 'json') {
foreach ($input as $k => $v) {
if ($v == 'true' || $v == 'false') {
$input[$k] = filter_var($v, FILTER_VALIDATE_BOOLEAN);
}
}
$input = json_encode($input);
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($input, $entity_name, $inputFormat);
return $entity;
}