1

FOSRestBundle : Annotations では、データベースからプロパティ名を取得するため、複数の@VirtualPropertyを動的な名前で使用したい(プロパティの数は不明)

class User
{
   private $id;
   private $name;

   /**
    * @Serializer\VirtualProperty
    *
    * @return array
    */
   public function getSomeMethod()
   {
       return array('property_name1'=> 'value1', 'property_name2'=>'value2');
   }
}

property_name1 & property_name2 .. property_name3 .. などは無限数で動的です

それらを仮想プロパティとして設定したいのですが、各プロパティには文字列値があります。

それらを1つのプロパティを持つ配列として設定したくありません。

これを行う方法がない場合は、コントローラーから同じタスクを実行できるかどうか教えてください。

4

2 に答える 2

1

もともとコメント...

@Serializer\Inline購入した配列のプロパティが親オブジェクトのプロパティになるように、これを使用できる場合があります。

もう少し情報

これにより、基本的に、公開されたプロパティまたは配列またはオブジェクトのキー/値を取得して、親オブジェクトのプロパティにすることができます。

例えば..

class Id
{
    /**
     * @Expose
     */
    private $id;

    //...
}

class Parent
{
    /**
     * @Expose
     * @Inline
     */
    private $id;

    /**
     * @Expose
     * @Inline
     */
    private $name = 'parent';

    /**
     * @Expose
     * @Inline
     */
    private [
        'key' => 'value',
    ];

    public function __construct()
    {
        $this->id = new Id('an-id');
    }
}

シリアル化中に最初に次のような配列に変換されます

[
    'id' => 'an-id',
    'name' => 'parent',
    'key' => 'value',
]
于 2016-11-07T12:10:33.147 に答える
1

FOSRestBundle はその下で JMSSerializer を使用しており、シリアライザーが返すものを完全に制御できるようにしたいので、出力データは受け取る入力に大きく依存するため、特定のクラスのカスタム ハンドラーを作成できます。

詳細については、次を参照してください。

于 2016-11-07T11:30:55.213 に答える