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

时间:2011-09-22 15:20:45

标签: symfony

我在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

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

3 个答案:

答案 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

检查您是否已将其实例化