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 4 JWT:访问 api 时我无法从控制器获得响应