我在Symfony2中为我的表单添加了文件上传功能。我跟着documentation here,但我一直收到以下错误:
致命错误:在非对象上调用成员函数move()
问题是,它引用的代码行是:
$this->file->move($this->getUploadRootDir(), $this->file->getClientOriginalName());
这是我从文档中获取的一行代码。我不完全确定为什么它会对move()
抱怨。我已经检查过我是否遗漏了任何文件,但我不是。
我是否必须创建对此的引用?或者我错过了一个文件?
干杯
修改
我已将以下代码添加到upload()
函数的开头:
// the file property can be empty if the field is not required
if (null === $this->file) {
return;
}
但是,我现在遇到以下错误:
1/2:例外:序列化 不允许使用'Symfony \ Component \ HttpFoundation \ File \ UploadedFile'
和
2/2:例外: Symfony的\桥\原则\ DataCollector \ DoctrineDataCollector ::连载() 必须返回一个字符串或NULL
我不知道我所做的事情是否修复了之前的错误,因为我现在遇到了这些错误。
答案 0 :(得分:1)
你不能持久保存文件属性,你的实体需要2个属性,一个用于保存UploadedFile,另一个用于保存文件名(保留文件)。
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
/**
* @Assert\File(maxSize="6000000")
*/
public $file;
您只在表单中添加$file
属性。
答案 1 :(得分:1)
添加功能
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload() {
if (null !== $this->file) {
$this->path = $this->file->getClientOriginalName();
}
}
然后在上传功能
public function upload() {
if (null === $this->file) {
return;
}
if ($this->file->move($this->getUploadRootDir(), $this->path)) {
// ok uploaded
}else{
echo "failed to upload";
}
}
答案 2 :(得分:0)
你可能有
$this->file == null
检查您是否已将其实例化