3

この REST API があります。ID(/resource/{id})でリソースを取得するリクエストが来るたびにpermissions、そのオブジェクトにその場で配列を追加したいと思います(エンティティ自体にはそのフィールドがありません)。

私が思いついたのは、このイベントリスナーです。コントローラーが返した結果をチェックします。

class PermissionFinderListener {
    ...

    public function onKernelView(GetResponseForControllerResultEvent $event)  {
        $object = $event->getControllerResult();

        if (!is_object($object) || !$this->isSupportedClass($object)) {
            return;
        }

        $permissions = $this->permissionFinder->getPermissions($object);
        $object->permissions = $permissions;

        $event->setControllerResult($object);
    }
    ....
}

問題は、JMS シリアライザーがシリアライゼーションでこの動的プロパティをオプトアウトすることです。onPostSerializeJMSシリアライザーでイベントサブスクライバーを作成しようとしましたが、これがGET ONEまたはGET COLLECTIONリクエストであるかどうかを確認する明確な方法がありません。この動作は必要ありませんGET COLLECTION。また、コレクションのシリアル化でパフォーマンスが大幅に低下します。permissionまた、プロパティを持つ基本エンティティ クラスを作成したくありません。

たぶん、このシナリオに対処する他の方法がありますか?

4

1 に答える 1