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.