Symfony 2,MongoDB + a2lix / translation-form-b​​undle

时间:2015-06-30 11:13:47

标签: php mongodb symfony doctrine

在Symfony 2.5中使用MongoDB时,我遇到了捆绑“a2lix / translation-form-b​​undle”的问题。我想我已经完成了文档中的所有操作,但我有“缺少必需的选项”类“。错误。

我的产品:

/**
 * 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“。”错误,我不知道是什么问题。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

所以请试试这个:

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

它可以帮助您解决这个特殊问题。