代码之家  ›  专栏  ›  技术社区  ›  geoforce

SonataUserBundle XML序列化程序配置不工作

  •  2
  • geoforce  · 技术社区  · 10 年前

    我有 SonataUserBundle JMSSerializerBundle 设置并运行。现在我正在尝试重写 Application\Sonata\UserBundle\Entity\User. 用于此配置的XML文件由 SonataEasyExtendsBundle 在: Application\Sonata\UserBundle\Resources\config\serializer\Entity.User.xml 看起来像这样:

     <?xml version="1.0" encoding="UTF-8"?>
    <serializer>
    <!--
        This file has been generated by the EasyExtends bundle 
        ( http://sonata-project.org/bundles/easy-extends )
    
        @author <yourname> <youremail>
    -->
    
        <class name="Application\Sonata\UserBundle\Entity\User" exclusion-policy="all" xml-root-name="user">
            <property name="id" type="integer" expose="true" since-version="1.0" groups="sonata_api_read,sonata_api_write,sonata_search" />
        </class>
    </serializer>
    

    我还配置了 app/config/config.yml 要使用该XML文件:

    jms_serializer:
        metadata:
            auto_detection: true
            directories:
                ApplicationSonatUserBundle:
                    path: @ApplicationSonataUserBundle/Resources/config/serializer
                    namespace_prefix: Application\Sonata\UserBundle\Model
    

    现在,根据配置,我应该只在对象序列化时看到id字段。但当我测试这个时,所有的场都暴露了。这显然是个坏主意。 我正在使用 FOSRestBundle 以实现正在使用的API层。如果我运行:

    get_class($this->getUser())
    //outputs Application\Sonata\UserBundle\Entity\User
    

    所以 FOSUserBundle 正在使用正确的 User 实体

    我已经看了几个小时了,找不到哪里出了问题。。。

    1 回复  |  直到 10 年前
        1
  •  2
  •   geoforce    10 年前

    最后解决了这个问题,显然您必须引用财产实际所在的类。在本例中,我试图公开FOS/UserBundle/Model/Entity中的属性id。我最终为Sonata/UserBundle/Model/User和FOS用户类配置了财产。我的XML现在看起来像这样:

    <serializer>
    <class name="Sonata\UserBundle\Model\User" exclusion-policy="all" xml-root-name="user">
        <property name="dateOfBirth" type="DateTime" expose="true" since-version="1.0" groups="profile" />
        <property name="firstname"   type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="lastname"    type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="website"     type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="locale"      type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="phone"       type="string"   expose="true" since-version="1.0" groups="profile" />
    
    </class>
    <class name="FOS\UserBundle\Model\User" exclusion-policy="all" xml-root-name="user">
        <property name="id"        type="integer"  expose="true" since-version="1.0" groups="profile" />
        <property name="username"  type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="email"     type="string"   expose="true" since-version="1.0" groups="profile" />
        <property name="roles"     type="array"    expose="true" since-version="1.0" groups="profile" />
    </class>
    </serializer>