2016-04-25 9 views
0

I Setup VichUploaderBundle mit benutzerdefinierten Datei namer haben und es funktioniert gut ..Symfony3 + VichUploaderBundle + benutzerdefinierten Upload-Verzeichnis

mein relevant 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 

meine Gewohnheit namer:

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; 
} 

Ich möchte jedoch benutzerdefinierten Pfad zum Hochladen von Datei verwenden.

Ich speichere den benötigten Upload-Pfad zur Sitzungsvariablen "upload_files_path" im Controller und besorge diesen Pfad im Namen.

Es speichert in der Datenbank (ID, Image_name, udated_at), , aber schreibt keine Datei in das Dateisystem!

Wenn ich

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

in der Vorlage Aufruf gibt es Dateipfad mit "/" vorangestellt. Ich kann nicht herausfinden, wie es funktioniert.

Hier ist meine Konfiguration für benutzerdefinierte Dateipfad: Also habe ich "uri_prefix" und "upload_destination" bearbeitet, um leer zu sein. bearbeitet 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 

meine aktualisiert benutzerdefinierte namer: Hier verketten i-Upload-Pfad mit neuen Dateinamen.

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; 
} 

Vielen Dank für Ihre Zeit und Ihr Wissen.

Antwort