【问题标题】:Symfony 3 Method 'guessExtension()' and 'move()' not foundSymfony 3方法'guessExtension()'和'move()'未找到
【发布时间】:2016-08-20 23:11:36
【问题描述】:

所以我一直在尝试上传多个文件并存储它们的位置。为了设置新的文件名,我尝试使用 symfony 文档http://symfony.com/doc/current/controller/upload_file.html 中描述的guessExtension() 方法,并且由于某种原因,该方法和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 风暴没有识别这些方法,因为我没有编译器错误,但是图像没有被上传。 Here's what my database field look like after form submission is complete.

config.yml

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

PHP 风暴说找不到要前往的声明。这可能是我的文件似乎没有上传的问题吗?如果是,我该如何正确指定路径?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    您在执行代码时是否真的遇到了错误,或者仅仅是 Symfony 中的自动完成?如果是后者:

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

    应该可以解决问题(您实际上可以输入 /** 并且 PHPStorm 将自动完成其余部分)。

    【讨论】:

    • 原来只是自动补全,但是表单提交后图像似乎没有上传到任何地方。
    【解决方案2】:

    忽略编辑器中的警告,它仍然有效。

    PhpStorm 在它们确实存在时无法找到方法。

    【讨论】:

    • 是的,似乎只是 PhpStorm,因为我在运行代码时没有遇到任何错误,但是图像似乎没有上传到任何地方。
    • 关于这一点,我在上传上做了一个完整的帖子,阅读它,它可能会帮助你弄清楚一些事情。 ;) stackoverflow.com/a/38945180/6711360
    【解决方案3】:

    好的,感谢 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 类型设置为数组时,我每次都会得到一个空数组.这是表单提交完成后我的数据库字段的样子。

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 2017-12-22
      相关资源
      最近更新 更多