Symfony2 / 文件上传 - 如果文件字段为空,则 guessExtension 为 null

Symfony2 / File Upload - guessExtension on null if file field is empty

我的文件字段 required = false,multiple=multiple。一切正常,但如果文件输入为空,symfony2 会向我显示此错误。

Error: Call to a member function guessExtension() on null

这是我的表单类型:

->add('file', 'file', array(
                'multiple' => 'multiple',
                'data_class' => null,
                'required' => false,
                'mapped' => false,
                'attr' => array(
                    'maxSize' => '1024k',
                    'accept' => 'image/*',
                )
            ))

上传功能:

private function uploadImg($files)
    {
        $path = array();
        foreach ($files as $file) {
            $extension = $file->guessExtension();
            if (!$extension) {
                $extension = 'bin';
            }
            $randomName = 'image' . date('Y-m-d-H-i-s') . uniqid() . '.' . $extension;
            $file->move('uploads/images/', $randomName);
            $path[] = $randomName;
        }
        return $path;
    }

如何检查文件输入是否为空?

$form['file']->getData();每次returnsArray

您可以使用continue跳过空文件

    foreach ($files as $file) {
        if(!$file) {
            continue; //skip
        }

        $extension = $file->guessExtension();
        if (!$extension) {
            $extension = 'bin';
        }
        $randomName = 'image' . date('Y-m-d-H-i-s') . uniqid() . '.' . $extension;
        $file->move('uploads/images/', $randomName);
        $path[] = $randomName;
    }

对于 Symfony 3,我使用了这个方法并且工作正常。

use Symfony\Component\HttpFoundation\File\UploadedFile;

public function updateAction(...){
  // $image is Entity property, change accordingly.
  $file = $item->getImage();
  if ($file instanceof UploadedFile) {
     ... upload code
  }
}