为什么“斑点"字段中的图像仅显示一次? [英] Why image from blob field displays only once?

查看:50
本文介绍了为什么“斑点"字段中的图像仅显示一次?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我覆盖了FOSUserBundle.我将用户实体(此实体扩展了FOSUser实体)中的化身字段获取器和设置器更改为:

I overrided FOSUserBundle. I changed my avatar field getter and setter in user Entity (This Entity extends FOSUser Entity) to this:

/**
* @ORM\Column(type="blob")
*/
protected $avatar;

public function setAvatar($avatar) {
    if ($avatar != null) {
        $strm = fopen($avatar->getRealPath(), 'rb');
        $this->avatar = stream_get_contents($strm);
    }
    return $this;
}

public function getAvatar() {
    if ($this->avatar != null) {
        return base64_encode(stream_get_contents($this->avatar));
    } else {
        return $this->avatar;
    }
}

它有效,但仅在第一个渲染中起作用

And it works but only in first render

<img alt="User avatar" src="data:image;base64,{{app.user.avatar}}"/> //working
<img alt="User avatar" src="data:image;base64,{{app.user.avatar}}"/> //not working

如果我第一次尝试显示此字段,则一切正常,每个下一个渲染都显示空字符串.为什么?该如何解决?

If i try display this field first time all is ok and each next render shows empty string. Why? How fix this?

其他字段工作正常.

推荐答案

当从数据库中加载实体时,Doctrine将不会使用您的设置器来填充您的实体.因此,当您第一次调用 getAvatar()时,将执行 stream_get_contents()并从流中读取所有内容.下次调用此getter方法时,将不再需要从流中读取任何内容.像调用 getAvatar()一样,您可能希望将 stream_get_contents()返回的字符串保存在 $ avatar 属性中.code> setAvatar().

Doctrine will not use your setters to populate your entity when it is loaded from the database. Thus, when you first call getAvatar(), stream_get_contents() is executed and reads everything from the stream. The next time this getter method is called, there is nothing left to read from the stream. You will probably want to save the string returned by stream_get_contents() in the $avatar property when getAvatar() is called like you do in setAvatar().

这篇关于为什么“斑点"字段中的图像仅显示一次?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆