在Symfony 2.5中使用MongoDB时,我遇到了捆绑“a2lix / translation-form-bundle”的问题。我想我已经完成了文档中的所有操作,但我有“缺少必需的选项”类“。错误。
我的产品:
/**
* 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;
}
这是我的ProductTranslation:
class ProductTranslation extends AbstractPersonalTranslation
{
/**
* @MongoDB\ReferenceOne(targetDocument="MyBundle\ProductBundle\Document\Product", inversedBy="translations")
*
*/
public $object;
}
我仍然得到“缺少所需选项”class“。”错误,我不知道是什么问题。
答案 0 :(得分:0)
您会收到此错误,因为MongoDB ODM Mapping会在Reference上创建字段映射。
例如,当您有ManyToOne或OneToMany关系时,ORM不会创建字段映射。
因此a2lix将您的object
字段视为通常的映射字段。由于表单生成器会解析object
类型的document
字段,因此您需要提供class
选项才能使其正常工作。
但是如果你提供这个选项,那么你的object
字段将被渲染为可翻译的字段,它肯定很糟糕。
所以请试试这个:
->add('translations', 'a2lix_translations', [
'exclude_fields' => [
'object',
]
])
它可以帮助您解决这个特殊问题。