Я использую 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?
У меня сейчас та же проблема, что и в качестве обходного пути, я немного изменил метод получения пули в классе сущности:
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;
}
}
Это добилось цели.
К сожалению, есть несколько недостатков:
urlizer
в получателе не сможет добавить приращение к имени файла, ранее сохраненный файл может быть перезаписан! В качестве обходного пути вы можете добавить unique=true
к вялым свойствам.По умолчанию пакет расширений доктрины не присоединяет слушателя:
http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html#activate-the-extensions-you-want
Вы должны настроить его так, чтобы он работал медленно:
stof_doctrine_extensions:
orm:
default:
sluggable: true