我遇到了一个我的项目的小问题。我有一个工作前端表单,可用于将图像放入数据对象并保存。到目前为止没问题,但它是一个头像,所以当我的一个用户上传avatar.png时,它可能会被另一个使用相同文件名的用户覆盖。这是预期的Silverstripe行为,但在我的情况下是不受欢迎的。
是否可以在图像名称前加一个字符串,例如用户名(这是唯一的)?在一个完美的世界中,只会发生在前端,但我会满足于: - )
此致 Joost的。
答案 0 :(得分:0)
好吧,最后我找到了以下解决方案。上传类有一个设置,可让您指定是替换图像还是更改图像文件名,然后上传。有趣的是,默认设置为不替换。
我使用的formfield类是UploadField,它扩展了使用上传类的FileField。默认情况下,UploadField类使用Upload-> setReplaceFile(true)设置上传以替换旧文件。
因此,我决定创建一个新的上传类,并用以下内容替换旧的上传类:
class VBUpload extends Upload {
public function setReplaceFile($bool) {
if(strpos($_SERVER["REQUEST_URI"],'admin/')===false) {
$this->replaceFile = false;
} else {
$this->replaceFile = $bool;
}
}
}
我只希望从前端调用默认工作更改,也许有更简洁的方法来实现这一点。但是这个对我有用。
下一步要做的就是强制系统实际使用该类,所以我将其添加到/mysite/_config/config.yml:
Injector:
Upload:
class: VBUpload
这可能也可以通过正常扩展来完成,但是当需要时我会改变它: - )