2017-08-08 141 views
0

这是第一次,我需要问一个问题 - 我通常会找到答案..为什么JMS更改我的Doctrine Entity布尔值?

我能够教条实体转换,并从JSON与JMS串行。我唯一的问题是,当我从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; 
} 

让我知道你是否需要别的东西。

回答

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