Symfony 4/JMS/FOSUser:无法从 FOS\UserBundle 序列化数据

Posted

技术标签:

【中文标题】Symfony 4/JMS/FOSUser:无法从 FOS\\UserBundle 序列化数据【英文标题】:Symfony 4/JMS/FOSUser: Can't serialize datas from FOS\UserBundleSymfony 4/JMS/FOSUser:无法从 FOS\UserBundle 序列化数据 【发布时间】:2022-01-02 18:03:12 【问题描述】:

有很多类似的问题,其中一些有经过验证的答案,但我在这里,但没有一个有效。

我的用例非常简单:

我的用户 App\Client\common\Entities\User 属于客户 App\Client\common\Entities\Customer

App\Client\common\Entities\User 也继承了FOS\UserBundle\Model\User,其中包含神圣属性“email”

我想对我的所有客户及其用户(包括他们的邮件)进行序列化。 Jms 工作得很好,只是我无法访问 FOS\UserBundle\Model\User 类的属性。

关注this answer 这是我现在所拥有的。

jms_serializer.yml

jms_serializer:
    #blablablaa....
    metadata:
        auto_detection: true
        directories:
            App:
                namespace_prefix: 'App\Client'
                path: '%kernel.project_dir%/serializer'
            FOSUB:
                namespace_prefix: 'FOS\UserBundle'
                path: '%kernel.project_dir%/serializer'

序列化器/App.Client.common.Entities.User.yml:

App\Client\common\Entities\User:
    exclusion_policy: ALL
    properties:
        surname:
            expose: true
            exclude: false
            groups: [export]

序列化器/Model.User.yml:

FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    properties:
        email:
            expose: true
            exclude: false
            groups: [export]

src/Command/DeploySyncUsersCommand.php:

protected function execute(InputInterface $input, OutputInterface $output)

    $users = $this->customerRepository->findAll(); //this is an array of Customer
    $context = new SerializationContext();
    $context->setGroups(['export']);
    $serializer = SerializerBuilder::create()->build();
    $json = $serializer->serialize($users, 'json', $context);
    // do something with json

一切正常,除了 json 不包含电子邮件或任何 FOSUser\User 数据。

另外有趣的是,我可以在 App.Client.common.Entities.User.yml 和 Model.User.yml 文件中写入任何内容(甚至是无效的 yml),我能够毫无错误地清除缓存。在 jms_serializer.yml 中写入无效 yml 时出现错误

【问题讨论】:

【参考方案1】:

好的,我已经能够使用依赖注入而不是构建序列化程序来解决这个问题

/**
 * @var SerializerInterface
 */
private SerializerInterface $serializer;

/**
 * @var string
 */
private string $reportAnalysisUrl;

public function __construct(SerializerInterface $serialzer, $reportAnalysis)

    $this->serializer = $serialzer;
    parent::__construct();


protected function execute(InputInterface $input, OutputInterface $output)

    $users = $this->customerRepository->findAll();
    $context = new SerializationContext();
    $context->setGroups(['export']);
    $json = $this->serializer->serialize($users, 'json', $context);
    //do something with json

所以现在我的 yml 文件不再被忽略

【讨论】:

以上是关于Symfony 4/JMS/FOSUser:无法从 FOS\UserBundle 序列化数据的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 自定义选民:无法从选民内部访问 getDoctrine

无法从 Symfony 2 上的内存登录中注销

Symfony 4 JWT:访问 api 时我无法从控制器获得响应

无法从 dist 下载 symfony/finder:解压 ZIP 文件时出错。损坏的文件?

symfony - 您的需求无法解析为一组可安装的软件包

无法在 Symfony2 websocket 连接上调用函数