Symfony VichUploaderBundle: не удалось создать имя файла

Я использую VichUploader для загрузки файлов в рамках проекта Symfony. В конфигурации я использую (скопировано из документации):

service: vich_uploader.namer_property
options: { property: 'slug'}

В моей сущности я генерирую слагов автоматически с помощью Gedmo / Sluggable:

/**
* @Gedmo\Slug(fields={"title"}, updatable=false)
* @ORM\Column(type="string", length=100, nullable=false)
*/
protected $slug;

Но при попытке сохранить сущность я получаю следующую ошибку 500:

Имя файла не может быть сгенерировано: свойство slug пусто.

Если я установлю свойство в ‘title’, оно будет работать. Я забыл параметр конфигурации или что-то еще, чтобы заставить его работать со слагом Gedmo?

5

Решение

У меня сейчас та же проблема, что и в качестве обходного пути, я немного изменил метод получения пули в классе сущности:

use Gedmo\Sluggable\Util\Urlizer;

class Event
{
// ...

/**
* @var string
*
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(name="slug", type="string", length=128, unique=true)
*/
private $slug;

// ...

public function getSlug()
{
if (!$this->slug) {
return Urlizer::urlize($this->getName());
}

return $this->slug;
}
}

Это добилось цели.

К сожалению, есть несколько недостатков:

  1. Если вы когда-нибудь захотите обновить медленное поведение в аннотации, включив в него дополнительные свойства, вам также придется обновить геттер.
  2. Этот метод не проверяет базу данных: если в базе данных уже есть запись с таким же именем urlizer в получателе не сможет добавить приращение к имени файла, ранее сохраненный файл может быть перезаписан! В качестве обходного пути вы можете добавить unique=true к вялым свойствам.
1

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

По умолчанию пакет расширений доктрины не присоединяет слушателя:
http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html#activate-the-extensions-you-want

Вы должны настроить его так, чтобы он работал медленно:

stof_doctrine_extensions:
orm:
default:
sluggable: true
0

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