私は1つを持っています集計ルート - 製品 - フィールドが少なく、そのうちのいくつかはPriceのようなオブジェクトです。それは(もちろん、それが簡略化された)のようになります。ネストされたオブジェクトのプライベートフィールドをシリアライズ
Product
{
private $price;
public function __construct(Price $price)
{
$this->price = $price;
}
}
Price
{
private $currency;
private $amount;
public function __construct($currency, $amount)
{
$this->currency = $currency;
$this->amount= $amount;
}
}
この集約ルートは「getPrice」方法、それはドメインでは不要だが含まれていません。
問題: 私はこの集計をシリアル化する必要がありますが、私はこの形式でそれを持ってしたいと思います:
Product.json
{
"priceCurrency": "GBP",
"priceAmount": 100
}
私はJMSSerializerにしようとしてきたことができますが、本当に設定からそれを得ていない。たとえばのためのこれはを動作しません:
Product.yml
Namespace\Product:
virtual_properties:
getAmount:
exp: object.price.amount
serialized_name: priceAmount
type: integer
getCurrency:
exp: object.price.currency
serialized_name: priceCurrency
type: string
私はそれが「EXP」の部分はsymfonyの表現言語で、何から使用されていることを、事実によるということを理解します私は、他の方法でプライベートフィールドから値を取得することをサポートしていないことを知っています。私はまた、JMSSerializer自体がそれをサポートしていることも知っています。フィールド "getPrice"を持っていなくても "price"フィールドをシリアライズすることができます。
質問:私が設定から欲しいものを達成する方法はありますか?または、post_serializeイベントでリスナーを作成する必要がありますか?
なぜあなたは仮想プロパティを使用していて、ちょうどプロパティ自体に 'serialized_name'を設定していませんか? –
hmm?それが私を助けるだろうか? serialized_nameはシリアライズされたフィールドの名前にすぎず、名前を設定するのではなく値を取得するのに問題があります。 – mmmm
多分、私はその問題が何かを誤解していました...私は、JMSがプライベートフィールド値を得るためにリフレクションを使用したと考えました。それはあなたが問題を抱えているのでしょうか?それとも、関連付けられたオブジェクトから特定の値を取得しようとしているという事実ですか? –