为什么注入EntityManagerInterface返回我无法序列化PhpFilesAdapter错误

时间:2019-10-16 07:57:43

标签: php symfony symfony4

我有一个以前从未遇到过的问题,即使我在另一个项目上也做过。我试图将EntityManagerInterface注入到我的User实体中(以便在配置数据库中获取内容)。因此,我使用了@PostLoad技术。

{
    public partial class Form1 : Form
    {
        System.Timers.Timer timer;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += Timer_Elapsed;
        }

        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            DateTime currentTime = DateTime.Now;


            string[] DailyTime = { 093000, 093500 };

            if (((currentTime.Hour * 10000)  + (currentTime.Minute *100)  + currentTime.Second) == DailyTime) 
            {
                timer.Stop();
                try 
                {
                    SoundPlayer player = new SoundPlayer();
                    player.SoundLocation = @"C:\Windows\Media\Time interval alarm\FiveH.wav";
                    player.Play();

我已经在另一个项目中做到了这一点,但在用户实体中却没有,而且效果很好。但是现在我得到了这个错误:

  

无法序列化Symfony \ Component \ Cache \ Adapter \ PhpFilesAdapter

我认为创建一种实用程序类可以防止我在实体中注入EntityManagerInterface会有所帮助,但我不知道我应该使用哪种类型的类,也许是服务?

1 个答案:

答案 0 :(得分:0)

并非完全与您的问题无关:将实体管理器注入实体表示设计错误,并且不打算在symfony / doctrine的规范中使用。

引起您问题的是user is serialized by symfony's session management,当它尝试序列化足够复杂的对象/服务时,它可能会失败。建议实现Serializable接口以仅序列化实际需要的内容(请参见同一链接)。它将解决此问题以及您可能遇到的其他可能的问题。它还可以减小会话的大小,会话的大小可能会随着应用程序的增长并附加到用户对象而变得更大。由于无论如何都会在每个请求上加载用户对象,因此序列化除上述属性(再次是相同的链接)之外的任何内容都非常浪费。