为什么 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' 的字符串值转换为 truefalse,因此代码检查是否字符串值为 true|false。

PHP: Booleans

我更新了我的 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;
}