Symfony 3 VichUploaderBundle没有将图像移动到正确的目录

时间:2016-04-19 17:51:32

标签: symfony vichuploaderbundle

我正在尝试将The VichImageBundle与Symfony3一起使用,对于与Vich Image Bundle一起使用的S3新增的FormType :: class调用,还没有任何文档。除了移动部件外,我的一切都在工作。

我在这里的项目中创建了一个文件夹结构:web / images / aod_images

我在yml文件中设置了如下配置:

vich_uploader:
    db_driver: orm 

    mappings:      
        aod_images:
            uri_prefix:         /images/aod_images
            upload_destination: %kernel.root_dir%/../web/images/aod_images

实体属性在这里:(我有吸气剂和固定剂)

/**
 * @Vich\UploadableField(mapping="aod_images", fileNameProperty="dailyChartName")
 * 
 * @var File
 */
private $dailyChart;

/**
 * @ORM\Column(type="string", length=255)
 * 
 * @var string
 */
private $dailyChartName;

/**
 * @Vich\UploadableField(mapping="aod_images", fileNameProperty="twohourChartName")
 * 
 * @var File
 */
private $twohourChart;

/**
 * @ORM\Column(type="string", length=255)
 * 
 * @var string
 */
private $twohourChartName;

我在控制器类中调用了一个set time方法,特别是在editAction和newAction控制器上:

$analysis->setUpdatedAt(new \DateTime('now'));

在此实体的FormType类中,到目前为止我有以下内容:

->add('dailyChartName', FileType::class, array())
->add('twohourChartName', FileType::class, array())

我不确定为每个图片实例传递给 - >添加方法的选项。

应用程序正在构建表单。

当我执行tail -f dev.log时,我得到以下消息作为doctrine.DEBUG频道的一部分:

(Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpEz6kJO)","13":"[object] (Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpVkbZgi)

图像名称属性与我在config.yml文件中映射的内容不匹配。相反,路径反映了我的本地机器路由到内部php tmp目录。我在使用server:run命令后从127.0.0.1:8000运行它。

当我查看该目录时,图像已经 NOT 移动到那里。

正在将(不正确的)图像名称复制到数据库中。但是图像的路径是空的(不正确的路径)。另外,正确的路径/目录也是空的。

问候!

修改

根据Matteo的建议,我对FormType.php文件进行了以下更改。

->add('dailyChart', VichFileType::class, array(
            'required' => TRUE,
        ))
->add('twohourChart', VichFileType::class, array(
            'required' => TRUE,            
        ))

编辑2

为了让我的实现更贴近文档,我根据文档建议将更新的设置放在实体中。

我的set方法看起来像这样:

public function setDailyChart(\Symfony\Component\HttpFoundation\File\UploadedFile $dailyChart)
{
    $this->dailyChart = $dailyChart;
        if ($dailyChart) {
            $this->updatedAt = new \DateTime('now');
        }
    return $this;
}

我使用完整路径明确设置了typehinting。现在我收到以下错误。

AppBundle\Entity\MTI_Cart\AodTechnicalAnalysis::setDailyChart() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given

1 个答案:

答案 0 :(得分:2)

要将此捆绑包与symfony3一起使用,您必须使用文档here中所述的表单类型:VichFileType,例如:

// ...
use Vich\UploaderBundle\Form\Type\VichFileType;

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    // ...

    $builder->add('image', VichFileType::class, array(
        'required'      => false,
        'allow_delete'  => true, // not mandatory, default is true
        'download_link' => true, // not mandatory, default is true
    ));
}

请在formType类中尝试:

use Vich\UploaderBundle\Form\Type\VichFileType;
//..
->add('dailyChartName', VichFileType::class, array())
->add('twohourChartName', VichFileType::class, array())

希望这个帮助