2

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
4

1 に答える 1

2

このバンドルを 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クラスでこれを試してください:

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

この助けを願っています

于 2016-04-19T18:31:51.587 に答える