“奇怪的错误”;对非对象调用成员函数move();在Symfony2中

“奇怪的错误”;对非对象调用成员函数move();在Symfony2中,symfony,Symfony,我正在Symfony2中向表单添加文件上载功能。我已经遵循了,但我一直得到以下错误: 致命错误:对非对象调用成员函数move() 问题是,它所指的代码行是: $this->file->move($this->getUploadRootDir(), $this->file->getClientOriginalName()); 这是我从文档中提取的一行代码。我不完全清楚为什么它会抱怨move()。我已经检查过了,看我是否丢失了任何文件,但我没有 我必须创建对此的引用吗

我正在Symfony2中向表单添加文件上载功能。我已经遵循了,但我一直得到以下错误:

致命错误:对非对象调用成员函数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\Bridge\Doctrine\DataCollector\DoctrineDataCollector::serialize() 必须返回字符串或NULL

我不知道我所做的是否修复了以前的错误,因为我现在遇到了这些错误。

您可能已经解决了

$this->file == null

检查是否已实例化该文件

如果无法分配文件属性,则实体中需要两个属性,一个用于保存上载的文件,另一个用于保存文件名(已持久化)

只能将
$file
属性添加到表单中。

添加函数

/**
 * @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";
    }
}

我在upload()函数的实体文件中有这一行。仍然没有乐趣:(Hi@Loutrailloune,我有同样的问题,但我不能解决它。我知道这与我的财产照片是字符串类型有关,但不知道如何将这样的图像保存在目录中,只保存在数据库中的文件名。如果你能帮助我,你可以看到我的问题。谢谢。
public function upload() {
    if (null === $this->file) {
        return;
    }

    if ($this->file->move($this->getUploadRootDir(), $this->path)) {
        // ok uploaded
    }else{
       echo "failed to upload";
    }
}