Я установил 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» в контроллере и извлекаю указанный путь в имени.
Сохраняет в базу данных (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;
}
Спасибо за ваше время и знания.
Не используйте сессии внутри вашего namer, так как namer должен быть без сохранения состояния.
Для настройки каталога вы можете использовать имя каталога. см документы на https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/namers.md#directory-namer
Других решений пока нет …