2012-04-01 14 views
6

私はsymfony.comの料理本の記事を使って画像のファイルアップロードオプションを実装しています。Symfony2:ファイルのアップロードを編集する

他のイメージをエンティティにロードしたいと思います。

編集のデフォルトの戦略は次のとおりです。 1.どういうわけか、この戦略は、ファイルのアップロードを使用しているとき(教義が実行されないもう動作しません

を永続フォーム 3にDB 2を注入外の取得イベント)

編集可能な記事を作成するには他に何ができますか?

答えて

10

料理の本はの更新を処理しません。特に、ファイルのみが変更された場合には、は更新を処理しません。あなたは、ファイルのアップロードはどのような場合に取り扱われますように、手動で$em->persist($entity)$entity->preUpload()をトリガーする必要があるので、この場合は

は、PreUpdateイベントが

+0

こんにちは、 youreの権利。フィールドが更新されない場合、ライフサイクルコールバックイベントは発生しません:) – bodokaiser

+0

Knp DoctrineExtensionsを使用する場合は、ファイルアップロードロジックを保持するエンティティでTimestampableを使用し、$ entity-> updateTimestamps();を使用します。 $ em-> persist()の前に必要なダミーフィールドを更新します;) –

7
(preUploadはそう永続化が発生します $entity->pathが変更されます)、トリガされません 変更がある場合は更新前とPostUpdateコールバックのみがトリガされ

あなたは料理で、ライフサイクルがアップロード方法を実行するだけでなく、アップロードフィールドを変更する場合は、以下のように引用ボックスでソリューションを報告していますエンティティの偽りの中の1つldが保持されます。つまり、デフォルトで$ fileプロパティのみを変更した場合、これらのイベント はトリガーされません。これは、プロパティ自体がDoctrineによって永続化された ではないためです。 1つの解決策は、Doctrineに保存された更新されたフィールド を使用し、ファイルを に変更するときに手動で修正することです。

このduscussionによって示唆として前にイベントを持続し、コントローラに更新するために、ダミーのフィールドを追加します。

https://github.com/symfony/symfony-docs/pull/564

public function setFile(UploadedFile $file) 
{ 
    $this->file = $file; 
    $this->updatedAt = new \DateTime(); 
} 
関連する問題