Symfony 2,MongoDB+a2lix/翻译表单捆绑包


Symfony 2, MongoDB + a2lix/translation-form-bundle

在Symfony 2.5中使用MongoDB时,捆绑包"a2lix/translation form bundle"出现问题。我想我已经完成了文档中的所有内容,但我有"缺少必需的选项"class"。"错误。

我的产品:

/**
 * Class Product
 * @MongoDB'Document(repositoryClass="MyBundle'ProductBundle'Repository'ProductRepository")
 * @Gedmo'TranslationEntity(class="MyBundle'ProductBundle'Document'ProductTranslation")
 */
class Product implements Translatable
{
/**
 * @MongoDB'Id
 *
 */
protected $id;
/**
 * @MongoDB'String
 * @Gedmo'Translatable
 */
protected $name;
/**
 *
 * @MongoDB'ReferenceMany(targetDocument="MyBundle'ProductBundle'Document 'ProductTranslation", mappedBy="object", cascade={"all"})
 *
 */
private $translations;

public function __construct()
{
    $this->translations = new ArrayCollection();
}
public function __toString()
{
    return $this->getName();
}
/**
 * Get id
 *
 * @return id $id
 */
public function getId()
{
    return $this->id;
}
/**
 * Set name
 *
 * @param string $name
 * @return self
 */
public function setName($name)
{
    $this->name = $name;
    return $this;
}
/**
 * Get name
 *
 * @return string $name
 */
public function getName()
{
    return $this->name;
}
/**
 * Set translations
 *
 * @param ArrayCollection $translations
 * @return Product
 */
public function setTranslations($translations)
{
    foreach ($translations as $translation) {
        $translation->setObject($this);
    }
    $this->translations = $translations;
    return $this;
}
/**
 * Get translations
 *
 * @return ArrayCollection
 */
public function getTranslations()
{
    return $this->translations;
}

这是我的产品翻译:

class ProductTranslation extends AbstractPersonalTranslation
{
/**
 * @MongoDB'ReferenceOne(targetDocument="MyBundle'ProductBundle'Document'Product", inversedBy="translations")
 *
 */
public $object;
}

我仍然收到"所需选项"class"丢失。"错误,我不知道是什么问题。

您会收到此错误,因为MongoDB ODM Mapping在Reference上创建了一个字段映射。

例如,当您有ManyToOne或OneToMany关系时,ORM不会创建字段映射。

因此a2lix将您的object字段视为通常的映射字段。由于表单生成器像document类型一样解析此object字段,因此需要提供class选项才能使其工作。

但如果您提供此选项,那么您的object字段将被渲染为可翻译字段,这肯定很糟糕。

所以请试试这个:

->add('translations', 'a2lix_translations', [
    'exclude_fields' => [
        'object',
    ]
])

它将帮助你解决这个特殊的问题。