2016-08-19 47 views
3

所以我一直在尝试上传多个文件并存储它们的位置。为了设置新文件名,我尝试使用guessExtension()方法,如symfony文档http://symfony.com/doc/current/controller/upload_file.html中所述,由于某些原因,此方法以及move()方法未被识别,如图所示。这是怎么回事?我试过包括Symfony的文件和UploadedFile类,但没有解决问题。Symfony 3方法'guessExtension()'和'move()'找不到

AutoController.php

 if($form->isValid() && $form->isSubmitted()) 
    { 
     $powerType = $form['power_type']->getData(); 

     if($powerType == 'kw') 
     { 
      $auto->setPowerKw($form['powerKw']->getData()); 
      $auto->setPowerHp(ceil($form['powerKw']->getData() * 1.34)); 
     } 
     else if($powerType == 'ag') 
     { 
      $auto->setPowerKw(ceil($form['powerKw']->getData() * 0.746)); 
      $auto->setPowerHp($form['powerKw']->getData()); 
     } 

     // PLACEHOLDER 
     $auto->setActive(true); 
     // PLACEHOLDER 

     // File uploading 
     $files = $auto->getImages(); 
     $images = array(); 

     foreach($files as $file) 
     { 
      $fileName = md5(uniqid()).'.'.$file->guessExtension(); 

      $file->move(
       $this->getParameter('carAdds_directory'), 
       $fileName 
      ); 
      $images[$fileName] = $fileName; 
     } 

     $auto->setImages($images); 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($auto); 
     $em->flush(); 

     return $this->render('@Auto/auto/index.html.twig'); 
    } 

实体类

/** 
* @var array 
* 
* @Assert\Image(
*  mimeTypes = { 
* "image/png", 
* "image/pjpeg", 
* "image/jpeg", 
* "image/gif" 
* }, 
*  mimeTypesMessage="Failas yra netinkamo formato", 
*  maxSize = "10M", 
*  maxSizeMessage="Failas yra per didelis" 
*) 
* @ORM\Column(name="images", type="array") 
*/ 
private $images; /** 
* Set images 
* 
* @param array $images 
* 
* @return Auto 
*/ 
public function setImages($images) 
{ 
    $this->images = $images; 

    return $this; 
} 

/** 
* Get images 
* 
* @return array 
*/ 
public function getImages() 
{ 
    return $this->images; 
} 

FormType类

  $builder->add('images', FileType::class, array(
      'label' => false, 
      'label_attr' => array('class' => $label_offset), 
      'required' => false, 
      'attr' => array(
       'class' => $styles, 
       'multiple' => 'multiple')))... 

*编辑 好吧,它确实看起来这只是PHP的风暴不能识别方法因为我没有编译错误,但是图像不存在上传。 Here's what my database field look like after form submission is complete.

config.yml

carAdds_directory: '%kernel.root_dir%/web/uploads/carAdds' 

腓风暴说找不到报关行去。这可能是为什么我的文件似乎没有上传的问题,如果是的话,我该如何正确指定路径?

回答

1

执行代码时实际发生错误还是仅仅是Symfony中的自动完成?如果是后者:

/** @var File $file */ 
foreach($files as $file) 
    { 
... 

应该做的诀窍(你实际上可以键入/ **和PHPStorm将自动完成其余)。

+0

原来这只是自动完成,但是图片似乎并不表单提交后,在任何地方上传。 –

0

在编辑器中点燃该警报,它仍然有效。

PhpStorm以某种方式无法找到他们确实存在的方法。

+0

是的,它似乎只是PhpStorm,因为我没有得到任何错误时运行代码,但图像似乎并没有上传到任何地方。 –

+0

关于这一点,我做了一个完整的上传文章,阅读它,它可能会帮助你找出一些东西。 ;)http://stackoverflow.com/a/38945180/6711360 – Preciel

+0

谢谢,会做。 –

0

好了,感谢Preciel的帖子https://stackoverflow.com/a/38945180/6711360有关文件上传事实证明,而不是指定喜欢我的上传目录:

carAdds_directory: '%kernel.root_dir%/web/uploads/carAdds' 

我不得不这样

carAdds_directory: '%kernel.root_dir%/../web/uploads/carAdds' 

然而,这说明它只有当我的实体类中的$ images参数设置为字符串时才起作用,但是我想同时上传多张图片,因此当我将$ images类型设置为数组时,每次都会获得一个空数组。这是我的数据库字段在完成表单提交后的样子。

Here's what my database field look like after form submission is complete.