Symfony3 + VichUploaderBundle + пользовательский каталог загрузки

Я установил 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;
}

Спасибо за ваше время и знания.

0

Решение

Не используйте сессии внутри вашего namer, так как namer должен быть без сохранения состояния.
Для настройки каталога вы можете использовать имя каталога. см документы на https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/namers.md#directory-namer

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]