4

コンテキストに応じてエンティティのさまざまな種類のシリアル化を実現するために、さまざまなグループを設定しようとしています。

私の設定は次のようになります:

My\FooBundle\Entity\Asset:
    exclusion_policy: ALL
    access_type: public_method
    properties:
        id:
            access_type: property
            expose: true
            groups: [fnord]
        name:
            expose: true
        path:
            expose: true
        isInQuarantine:
            expose: true
            groups: [baz]

グループが設定されていない限り、プロパティを持つグループは公開されるべきではないと思います。

次の方法でコントローラーにグループを設定しようとしています。

    $view->setSerializationContext(SerializationContext::create()->setGroups(array('fnord')));

それでも、露出されているものと露出されていないものには影響はありません。を変更しようとしなくてもSerializationContextgroupsオプションは常に無視されるようです。

公開フラグを介してプロパティを切り替えることができるため、構成が機能していることはわかっています。

しかし、私はここで何が間違っていますか?

4

1 に答える 1

2

この質問は少し古いことは知っていますが、他の人に役立つかもしれません。同様の問題が発生しました。これは、コントローラー (FOSRestControler を拡張する) に複数の呼び出しを持つメソッドがあったためです。

$this->getView()

このメソッドが新しい View オブジェクトを作成することに注意してください。

つまり、複数の getView メソッドを呼び出すと、コンテキストがリセットされます。

私のアプリで機能した次のコードを見てください。

use FOS\RestBundle\Controller\FOSRestController as Controller;    
class RestController extends Controller
{
   public function getUserAction($username)
    {
        $view = $this->view();
        $view->setSerializationContext(SerializationContext::create()->setGroups(array('Product')));

        $user = $this->getDoctrine()->getManager()->getRepository('VendorUserBundle:User')->findOneByUsername($username);
        if(!is_object($user))
        {
            throw $this->createNotFoundException();
        }
        $view->setData($user);
        return $view;
    }
}

Model.User.yml ファイル内:

FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    properties:
        username:
            expose: true
            groups: [fnord]
        email:
            expose: true
            groups: [Product]
        enabled:
            expose: true
            groups: [Product]
        roles:
          expose: true
          groups: [Product]

次の出力が得られます。

{"email":"guiguiboy@xxx.com","enabled":true,"roles":["ROLE_XXX"]}

キャッシュ関連の問題はありませんでした (dev env を使用)。

于 2014-12-17T10:32:23.637 に答える