VichUploader uri_prefix не учитывает среду

Я использую VichUploaderBundle в моем проекте.
Я не могу получить ссылку для скачивания (при использовании vich_file тип формы) для учета окружающей среды (особенно DEV). Что я хочу сделать, так как я хочу направить функцию загрузки через функцию.

Мой конфиг как;

vich_uploader:
db_driver: orm
twig:      true
mappings:
logo_image:
uri_prefix:         /foo/image
upload_destination: %kernel.root_dir%/../app/private/images
inject_on_load:     false
delete_on_update:   true
delete_on_remove:   true

И это генерирует URI загрузки http://example.com/foo/image/fubar.jpgнезависимо от окружающей среды.
Когда в среде разработчиков это должно быть http://example.com/app_dev.php/foo/image/fubar.jpgили в тестовой среде
http://example.com/app_test.php/foo/image/fubar.jpg

1

Решение

Возможное решение — использовать пользовательский класс имен файлов, который имеет доступ к классу маршрутизатора.
В конфиге установите uri_prefix в /

vich_uploader:
db_driver: orm
twig:      true
mappings:
logo_image:
uri_prefix:         /
upload_destination: %kernel.root_dir%/../app/private/images
inject_on_load:     false
delete_on_update:   true
delete_on_remove:   true
namer: my.namer.foo

Создайте класс имен сервисов, который возвращает полный URL с требуемым маршрутом (с параметром);

<?php
namespace AppBundle\Service;

use Vich\UploaderBundle\Naming\NamerInterface,
Vich\UploaderBundle\Mapping\PropertyMapping;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
class MyNamer implements NamerInterface
{

private $router;

public function __construct(Router $router)
{
$this->router = $router;
}

public function name($foo, PropertyMapping $mapping)
{
$router = $this->router->getContext();
$full_url = $router->getHost();
$full_url .= $router->getBaseUrl().'/';
$full_url .= 'foo/logo/'.strtolower($foo->getName());
return $full_url;
}

}

Зарегистрируйте это как услугу;

services:
my.namer.foo:
class: AppBundle\Service\MyNamer
arguments: ['@router']
tags:
- { name: namer }
0

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

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

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