私は Symfony で Doctrine ORM を使用しており、私のエンティティの 1 つは Setting オブジェクトです。内部では、値キーは文字列または配列のいずれかであり、それに応じてライフサイクル コールバックが調整されます。値のキー (配列) が列の型 (テキスト) と一致しないため、JMS シリアライザーが混乱するという問題が発生しました。この2つが共存する方法はありますか?コンテンツが配列でない場合、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);
}