上传每个翻译的文件

时间:2015-08-10 12:05:42

标签: symfony vichuploaderbundle a2lix-translation

我有一个包含已翻译字段的表单。其中一个字段是一个文件,必须要上传(每种语言都有不同的文件)。

我正在使用'stof / doctrine-extensions-bundle'和'a2lix / translation-form-b​​undle'以及使用symfony2上传文件'vich / uploader-bundle'。

发现了这个https://github.com/a2lix/TranslationFormBundle/issues/83,但它无效

Maximum function nesting level of '100' reached, aborting!

我的目录实体:

/**
 * Catalog.
 *
 * @ORM\Entity()
 * @ORM\Table("catalog")
 *
 * @Vich\Uploadable
 *
 * @Gedmo\TranslationEntity(class="Entity\Catalog\CatalogTranslation")
 */
class Catalog
{

/**
 * @var int
 *
 * @ORM\Column(type="integer")
 * @ORM\Id()
 * @ORM\GeneratedValue()
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column()
 *
 * @Gedmo\Translatable()
 *
 * @Assert\NotBlank()
 */
private $name;
/**
 * @var File
 *
 * @Vich\UploadableField(mapping="product_image", fileNameProperty="imageName")
 *
 * @Assert\Image(maxSize = "4M")
 */
protected $imageFile;

/**
 * @var string
 *
 * @ORM\Column(nullable=true)
 * @Gedmo\Translatable()
 */
protected $imageName;
/**
 * @ORM\OneToMany(
 *   targetEntity="CatalogTranslation",
 *   mappedBy="catalog",
 *   cascade={"persist", "remove"}
 * )
 */
private $translations;
}

在构建表单时也试过这个:

->add('imageName', 'a2lix_translationsForms', [
            'form_type' => 'vich_file',
            'form_options' => array(
                'required' => true,
                'mapping' => 'product_image',
                'allow_delete' => true,
                'download_link' => true,
            )
        ])

1 个答案:

答案 0 :(得分:0)

我的猜测是CatalogTranslation应该是定义为可上传的类,否则它可能会混淆VichUploaderBundle。

我尝试这样的事情:

<?php

/**
 * Catalog.
 *
 * @ORM\Entity()
 * @ORM\Table("catalog")
 *
 * NOT uploadable
 *
 * @Gedmo\TranslationEntity(class="Entity\Catalog\CatalogTranslation")
 */
class Catalog
{
    /**
     * @var int
     *
     * @ORM\Column(type="integer")
     * @ORM\Id()
     * @ORM\GeneratedValue()
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column()
     *
     * @Gedmo\Translatable()
     *
     * @Assert\NotBlank()
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(nullable=true)
     * @Gedmo\Translatable()
     */
    protected $imageName;
    /**
     * @ORM\OneToMany(
     *   targetEntity="CatalogTranslation",
     *   mappedBy="catalog",
     *   cascade={"persist", "remove"}
     * )
     */
    private $translations;
}

class CatalogTranslation
{
    // ... as usual

    /**
     * @var File
     *
     * @Vich\UploadableField(mapping="product_image", fileNameProperty="imageName")
     *
     * @Assert\Image(maxSize = "4M")
     */
    protected $imageFile;


    protected $imageName;
}