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