2016-04-25 9 views
0

У меня есть настройки 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; 
} 

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

ответ