Папка изображений Symfony

Недавно я установил модуль загрузки на своем веб-сайте. Однако мне кажется, что помещать все изображения в один каталог - это слишком беспорядочно. Поэтому я решил создать по одной папке для каждого пользователя с помощью symfony. После регистрации пользователя скопируйте и вставьте существующую папку, а затем поработайте с атрибутом имени (идентификатора пользователя), чтобы различать разные папки.

Итак, я добавил атрибут с именем name

private $name;

public function getUploadRootDir()
{
    return __dir__ . '/../../../../web/uploads/'. $this->getName();
}

public function getAbsolutePath()
{
    return null === $this->path ? null : $this->getUploadRootDir() . '/' . $this->path;
}

public function getWebPath($name) {

    return 'uploads/' . $name->getId() . '/' . $this->path;
}

public function getAssetPath()
{
    return 'uploads/' . $this->getName() . '/' . $this->path;
}

Загрузка работает нормально, в контроллере я делаю что-то вроде:

 $imageProfile->getImage()->setName($user->getId());

Он загружает картинки в хороший каталог.

Для отображения картинки делаю следующее:

<img  class="img-responsive"src="{{ asset(player.base.getWebPath(user)) }}" />

С этим все работает плавно, я вижу картинку, и она находится в хорошей папке.

Проблема:

Я получаю эту ошибку, когда хочу отобразить изображение, а также форму для редактирования изображения.

Предупреждение: отсутствует аргумент 1 для COC \ COCBundle \ Entity \ Image :: getWebPath (), вызываемого в C: \ wamp \ www \ symfony_coc \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ PropertyAccess \ PropertyAccessor.php в строке 310 и определил

Я предполагаю, что он идет с параметром name, который я добавил к методу getWebPath (), но я не понимаю, почему это связано с ошибкой поставщика. (Я попытался удалить и сгенерировать его снова, та же проблема)

Ваша помощь будет очень признательна.

Спасибо.


person Community    schedule 19.03.2015    source источник
comment
Что вы получаете, когда вы dump () user?   -  person Michael Villeneuve    schedule 19.03.2015
comment
Фоа, спасибо за ответ. Я получаю то, что и ожидалось: частный 'путь' (COC \ COCBundle \ Entity \ Image) = ›строка 'b6a762e8beb8eb314495dc51b8dca523f644e73f.jpeg' (length = 45) public 'file' =› null private 'iduser' (COC \ COCBundle \ Entity \ Image) = ›int 1 (Файл пуст, потому что я ничего не отправлял на странице, я просто хотел бы показать свое изображение ...)   -  person    schedule 19.03.2015


Ответы (1)


Ваша ошибка, это нормально, что она связана с поставщиком, поскольку Symfony также входит в состав поставщика, а PropertyAccessor является одним из его компонентов, который обрабатывает доступ к свойствам объекта и пытается получить доступ к вашему веб-пути, но параметр имени отсутствует, поэтому он генерирует эту ошибку.

Возможно, вам стоит проверить, вызываете ли вы getWebPath где-нибудь еще в проекте, а затем добавьте к нему свой параметр.

Если эта строка является единственной, которая использует getWebPath, то, возможно, это ваш кеш, и в нем все еще есть версия: {{ asset(player.base.getWebPath()) }} без параметра, если это так, попробуйте очистить кеш в папке консоли вашего проекта:

php app/console cache:clear --env=dev --no-warmup --no-debug

или --env = prod при использовании prod (app.php).

Если это не сработает, попробуйте:

sudo rm -R app/cache/dev/twig/ or app/cache/prod/twig/

person Nawfal Serrar    schedule 20.03.2015