2

配列のコンテナーとしてのみ使用されるクラスがあります。

class Container {
    private $things = array();

    public function addThing($thing) {
        $this->things[] = $thing;

        return $this;
    }

    public function getThings() {
        return $this->things;
    }
}

JMS\Serializer を使用して、このクラスに含まれる配列のみをシリアル化することをお勧めします。そのために、特別なハンドラー関数を使用します。

use JMS\Serializer\Annotation\HandlerCallback;

class Container {
    // ...

    /**
     * @HandlerCallback("json", direction = "serialization")
     */
    public function serializeToJson() {
        return $this->things;
    }
}

今私が走れば

$container = new Container();
$container->addThing('something'); // optional
print_r($serializer->serialize($container, 'json'));

私の期待は、私が得ることです

[
    'something'
]

しかし、私が得るのはnull.

ここで問題を報告しましたが、この問題の回避策を知っている人はいますか? 望ましい結果を得るには、この問題にどのように取り組む必要があります@HandlerCallbackか (または他のアイデアを使用せずに)。

ありがとう!

4

1 に答える 1

0

次のように、メソッドの引数として渡された訪問者オブジェクトを使用してみてください。

/** @HandlerCallback("json", direction = "serialization") */
public function serializeToJson(JsonSerializationVisitor $visitor)
{
    $visitor->addData($this->things);
}

この助けを願っています

于 2016-05-26T09:45:04.640 に答える