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

Symfony 4/JMS/FOSUser: Can't serialize datas from FOS\UserBundle

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

我的用例非常简单:

我想序列化我所有的客户和他们的用户(包括他们的邮件)。 Jms 工作得很好,除了我无法从 FOS\UserBundle\Model\User class.

访问属性

下面这是我现在的。

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'

serializer/App.Client.common.Entities.User.yml :

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

serializer/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 时出现错误

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

/**
 * @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 文件不再被忽略