我将 Doctrine ORM 与 Symfony 一起使用,我的实体之一是 Setting 对象。在内部,值键可以是字符串或数组,并带有生命周期回调以进行相应调整。我遇到了一个问题,JMS 序列化器会因为值键(数组)与列类型(文本)不匹配而感到困惑。有没有办法让这两者共存?如果内容不是数组,我可以告诉 Doctrine 回退到文本吗?它不使用 Doctrine,但 WordPress 在选项表中处理了这类事情。
编辑 这是到目前为止的一些代码。当保存在对象中时它可以正常工作,但当 JMS 序列化器必须为 API 请求序列化它时会失败。
列定义
/**
* @ORM\Column(type="text", nullable=true)
* @Expose
*/
protected $value;
根据需要取消/序列化列的自定义处理程序
/**
* @ORM\PrePersist
* @ORM\PreUpdate
* Serialize, if necessary
*/
public function serializeSetting() {
if (is_array($this->getValue())) {
$this->setValue(serialize($this->getValue()));
}
}
/**
* @ORM\postLoad
* Unserialize, if necessary
*/
public function unserializeSetting() {
$unserialized = @unserialize($this->getValue());
if ($unserialized !== false)
$this->setValue($unserialized);
}