为什么JMS会更改我的Doctrine Entity布尔值?

时间:2017-08-08 18:46:42

标签: php doctrine-orm jmsserializerbundle

这是我第一次提出问题 - 我通常会找到答案..

我可以使用JMS Serializer将Doctrine实体转换为JSON和从JSON转换。我唯一的问题是,当我从JSON反序列化回实体时,JSON中的任何错误布尔值:"boolean_value":false将在Doctrine Entity中设置为true

我已将其缩小到JMS Serializer。此代码中的数据已更改。

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;
}

如果您还有其他需要,请告诉我。

1 个答案:

答案 0 :(得分:0)

事实证明,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;
}