Symfony 3中找不到方法'guessExtension()'和'move()'

3
我一直在尝试上传多个文件并存储它们的位置。为了设置新的文件名,我尝试使用Symfony文档中描述的guessExtension()方法http://symfony.com/doc/current/controller/upload_file.html,但是由于某种原因,这个方法以及move()方法都没有被识别,如图所示。发生了什么事?我已经尝试包含Symfony的File和UploadedFile类,但这并没有解决问题。
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 storm未能识别方法,因为我没有编译器错误,但图像未被上传。 在表单提交完成后,这是我的数据库字段的样子。

config.yml

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

Php Storm提示找不到声明。这可能是导致我的文件似乎未上传的原因,如果是这样,我该如何正确指定路径?

3个回答

1

你在执行代码时是否实际遇到错误,还是仅仅是Symfony中的自动补全提示?如果是后者:

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

应该能解决问题(实际上你可以输入 /**,PHPStorm会自动补全剩下的部分)。

结果发现只是自动补全,但在表单提交后似乎没有将图像上传到任何地方。 - prox M

0

忽略编辑器中的警告,它仍然可以正常工作。

PhpStorm 无法找到方法,但实际上它们是存在的。


是的,看起来这只是 PhpStorm 的问题,因为当运行代码时我没有收到任何错误信息,但图片似乎没有上传到任何地方。 - prox M
关于这个问题,我写了一篇完整的上传文章,请阅读它,它可能会帮助你解决一些问题。 ;) http://stackoverflow.com/a/38945180/6711360 - Preciel

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.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接