JMSSerializerBundle,MongoDB和XML元数据

时间:2013-09-12 03:28:11

标签: mongodb symfony fosuserbundle doctrine-odm jmsserializerbundle

我整晚都在整理这个大脑。每次我尝试从文档查询序列化结果时,都会收到 bool(false)的结果。据推测,这意味着序列化失败了(太棒了!也许你愿意告诉我你失败的原因?不是吗?不这么认为。

我告诉JMSSerializerBundle我的FOSUserBundle映射的位置,例如:

jms_serializer:
    metadata:
        file_cache:
            dir: "%kernel.cache_dir%/serializer"
        auto_detection: true
        directories:
            FOSUserBundle:
                namespace_prefix: "FOS\\UserBundle"
                path: "%kernel.root_dir%/config/serializer/fosuser"

我已经定义了一个非常简单的XML序列化器元数据文件,例如的 Model.User.xml

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="FOS\UserBundle\Model\User" xml-root-name="user" exclusion-policy="all">
        <property name="username" type="string" expose="true" />
    </class>
</serializer>

并且,在测试控制器中,我在尝试执行更复杂的操作之前手动调用序列化程序,例如:

class DefaultController extends Controller
{
    public function serializeAction()
    {
        $userManager = // get the user manager
        $users = $userManager->findUsers();         
        $serializer = $this->get('jms_serializer');
        foreach ($users as $id => $user) {
            Debug::dump('Processing user: '.$user->getUsername());
            $result = $serializer->serialize($user, 'json');
            Debug::dump($result);
        }
        /*return a response */
    }
}

结果呢?始终布尔(假)

但是,如果我手动构造一个新的User对象,序列化工作正常,例如:

class DefaultController extends Controller
{
    public function serializeAction()
    {
        $userManager = // get the user manager
        $users = $userManager->findUsers();         
        $serializer = $this->get('jms_serializer');

        $user = new User();
        $user->setUsername('testusername');
        Debug::dump('Processing user: '.$user->getUsername());
        $result = $serializer->serialize($user, 'json');
        Debug::dump($result);
        /*return a response */
    }
}

有什么想法?我准备好对此失去理智。

编辑:还有待进一步思考,值得注意的是,它看起来并不像我的序列化元数据。如上所示,我只公开了用户名,但是当我在控制器中创建一个新的User并序列化它时,我看到的不仅仅是暴露的,我看到:username,{{1 },enabledlockedexpiredroles。我怀疑我会看到每个字段,如果它有非空数据。

编辑(2):我见过credentials_expiredDoctrineObjectConstructor的默认对象构造函数使用serializer的引用;并采取了这个answer中确定的步骤,希望他们可以解决我的问题。唉,他们没有(看起来答案和问题更多的是反序列化,但任何方式)并且 bool(false)的结果仍然存在。

编辑(3):序列化元数据未被提取的问题似乎是由于auto_detectiondirectories的明确声明的混合造成的,正如我问过的另一个问题所示:JMSSerializerBundle mixing auto detection and explicit directories?

0 个答案:

没有答案