У меня есть настройки VichUploaderBundle с пользовательским файлом Namer и она отлично работает ..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
мой заказ 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;
}
Однако я хочу использовать пользовательский путь для загрузки файла.
Я сохраняю необходимый путь загрузки к переменной сеанса «upload_files_path» в контроллере и извлекает указанный путь в namer.
Он сохраняет базу данных (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
мой обновленный пользовательский Namer: Здесь я конкатенация пути загрузки с новым именем файла.
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;
}
Спасибо за ваше время и знания.