2016-04-25 3 views
0

私はカスタムファイルナメルとセットアップVichUploaderBundleを持っており、それが正常に動作します。..Symfony3 + VichUploaderBundle +カスタムアップロードディレクトリ

私の関連config.yml:

vich_uploader: 
    db_driver: orm 

    mappings: 
     product_image: 
      uri_prefix: '/uploads/products' 
      upload_destination: '%kernel.root_dir%/../web/uploads/products' 

      namer: namer.product_image 
      #namer: vich_uploader.namer_uniqid 
      #namer: vich_uploader.namer_origname 
      #namer: vich_uploader.namer_property 

      inject_on_load:  false 
      delete_on_update: true 
      delete_on_remove: true 

私のカスタムナメル:

public function name($obj, PropertyMapping $mapping) 
{ 
    $file = $mapping->getFile($obj); 

    $new_name = $this->generateRandomSecret(); 

    if ($extension = $file->guessExtension()) 
    { 
     $new_name = $new_name .'.'. $extension; 
    } 

    return $new_name; 
} 

しかし、私はファイルをアップロードするカスタムパスを使用したい。

セッション変数「upload_files_path」 への必要なアップロードパスをコントローラに保存し、上記のパスを取得します。

データベース(id、image_name、udated_at)に保存しますが、 ですが、ファイルシステムにファイルを書き込むことはありません!

私はそれが "/" で先頭に追加ファイルパスを返すテンプレート内

<img src="{{ vich_uploader_asset(product, 'imageFile') }}" /> 

を呼び出します。 私はそれを動作させる方法を理解できません。

カスタムファイルパスの設定は次のとおりです。 "uri_prefix"と "upload_destination"を空白に編集しました。 編集したconfig.yml

vich_uploader: 
    db_driver: orm 

    mappings: 
     product_image: 
      uri_prefix: '' 
      upload_destination: '' 

      namer: namer.product_image 

      inject_on_load:  false 
      delete_on_update: true 
      delete_on_remove: true 

私の更新されたカスタムナメル: はここで私は、新しいファイル名でアップロードパスを連結します。

public function name($obj, PropertyMapping $mapping) 
{ 
    $file = $mapping->getFile($obj); 

    $new_name = $this->generateRandomSecret(); 

    if ($extension = $file->guessExtension()) 
    { 
     $new_name = $new_name .'.'. $extension; 
    } 

    $upload_path = $this->container->get('session')->get('upload_files_path'); 

    $full_path = $upload_path . $new_name; 
    return $full_path; 
} 

あなたの時間と知識をありがとう。

答えて