Symfony3 で VichImageBundle を使用しようとしていますが、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;
コントローラー クラス、特に editAction コントローラーと newAction コントローラーで、必要に応じて set time メソッドを呼び出しています。
$analysis->setUpdatedAt(new \DateTime('now'));
このエンティティの FormType クラスには、これまでのところ次のものがあります。
->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 から実行しています。
そのディレクトリを見ると、画像はそこに移動されていません。
(間違った) イメージ名がデータベースにコピーされています。ただし、画像へのパスは空です (パスが正しくありません)。さらに、正しいパス/ディレクトリも空です。
よろしく!
編集
Matteo の提案に従って、FormType.php ファイルに次の変更を加えました。
->add('dailyChart', VichFileType::class, array(
'required' => TRUE,
))
->add('twohourChart', VichFileType::class, array(
'required' => TRUE,
))
編集2
実装をドキュメントにより厳密に準拠させるために、ドキュメントの提案に従って、updatedAt セットをエンティティ内に配置しました。
私の set メソッドは次のようになります。
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