我正在使用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:



如果我将属性设置为“标题”,则可以使用。我是否忘记了配置参数或其他使它与Gedmo slug配合使用的参数?

最佳答案

目前,我遇到了相同的问题,作为一种解决方法,我在实体类中稍稍更改了子弹头 setter/getter :

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;
    }
}

做到了。

不幸的是,有两个缺点:
  • 如果您想更新批注中的缓慢行为以包括其他属性,则还必须更新getter。
  • 此方法缺少对数据库的检查:如果数据库中已经存在一个具有相同名称的记录,则getter中的urlizer将无法在文件名中添加增量,则先前保存的文件可能会被覆盖!作为一种解决方法,您可以将unique=true添加到缓慢的属性中。
  • 关于php - Symfony VichUploader捆绑包: File name could not be generated,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35749923/

    10-13 23:17