Symfony 3 VichUploaderBundle 没有将图像移动到正确的目录
Symfony 3 VichUploaderBundle not moving images to the correct directory
我正在尝试将 VichImageBundle 与 Symfony3 一起使用,目前还没有关于 FormType::class 调用的文档,它是 S3 的新功能,与 Vich Image Bundle 结合使用。除了移动部分,我的一切都正常。
我在这里的项目里面做了一个文件夹结构: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
实体属性在这里:(我有 getter 和 setter)
/**
* @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;
我正在控制器 class 中适当地调用设置时间方法,特别是在 editAction 和 newAction 控制器上:
$analysis->setUpdatedAt(new \DateTime('now'));
在这个实体的 FormType class 中,到目前为止我有以下内容:
->add('dailyChartName', FileType::class, array())
->add('twohourChartName', FileType::class, array())
我还不确定要为每个图像实例传递哪些选项给 ->add 方法。
应用程序正在正确构建表单。
当我执行 tail -f the 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 运行 这个。
当我查看那个目录时,图像没有被移动到那里。
正在将(不正确的)图像名称复制到数据库中。但是图像的路径是空的(不正确的路径)。另外正确的path/directory也是空的
此致!
编辑
根据 Matteo 的建议,我对 FormType.php 文件进行了以下更改。
->add('dailyChart', VichFileType::class, array(
'required' => TRUE,
))
->add('twohourChart', VichFileType::class, array(
'required' => TRUE,
))
编辑 2
为了使我的实现更符合文档,我按照文档建议将我的 updatedAt 集放在实体中。
我的设置方法看起来像这样:
public function setDailyChart(\Symfony\Component\HttpFoundation\File\UploadedFile $dailyChart)
{
$this->dailyChart = $dailyChart;
if ($dailyChart) {
$this->updatedAt = new \DateTime('now');
}
return $this;
}
我明确设置了带有完整路径的类型提示。现在我收到以下错误。
AppBundle\Entity\MTI_Cart\AodTechnicalAnalysis::setDailyChart() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given
要将此包与 symfony3 一起使用,您必须使用格式类型:VichFileType
,如文档 here 中所述,例如:
// ...
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 中试试这个 class:
use Vich\UploaderBundle\Form\Type\VichFileType;
//..
->add('dailyChartName', VichFileType::class, array())
->add('twohourChartName', VichFileType::class, array())
希望对您有所帮助
我正在尝试将 VichImageBundle 与 Symfony3 一起使用,目前还没有关于 FormType::class 调用的文档,它是 S3 的新功能,与 Vich Image Bundle 结合使用。除了移动部分,我的一切都正常。
我在这里的项目里面做了一个文件夹结构: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
实体属性在这里:(我有 getter 和 setter)
/**
* @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;
我正在控制器 class 中适当地调用设置时间方法,特别是在 editAction 和 newAction 控制器上:
$analysis->setUpdatedAt(new \DateTime('now'));
在这个实体的 FormType class 中,到目前为止我有以下内容:
->add('dailyChartName', FileType::class, array())
->add('twohourChartName', FileType::class, array())
我还不确定要为每个图像实例传递哪些选项给 ->add 方法。
应用程序正在正确构建表单。
当我执行 tail -f the 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 运行 这个。
当我查看那个目录时,图像没有被移动到那里。
正在将(不正确的)图像名称复制到数据库中。但是图像的路径是空的(不正确的路径)。另外正确的path/directory也是空的
此致!
编辑
根据 Matteo 的建议,我对 FormType.php 文件进行了以下更改。
->add('dailyChart', VichFileType::class, array(
'required' => TRUE,
))
->add('twohourChart', VichFileType::class, array(
'required' => TRUE,
))
编辑 2
为了使我的实现更符合文档,我按照文档建议将我的 updatedAt 集放在实体中。
我的设置方法看起来像这样:
public function setDailyChart(\Symfony\Component\HttpFoundation\File\UploadedFile $dailyChart)
{
$this->dailyChart = $dailyChart;
if ($dailyChart) {
$this->updatedAt = new \DateTime('now');
}
return $this;
}
我明确设置了带有完整路径的类型提示。现在我收到以下错误。
AppBundle\Entity\MTI_Cart\AodTechnicalAnalysis::setDailyChart() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given
要将此包与 symfony3 一起使用,您必须使用格式类型:VichFileType
,如文档 here 中所述,例如:
// ...
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 中试试这个 class:
use Vich\UploaderBundle\Form\Type\VichFileType;
//..
->add('dailyChartName', VichFileType::class, array())
->add('twohourChartName', VichFileType::class, array())
希望对您有所帮助