Symfony2中的虚拟字段

时间:2011-11-15 09:38:32

标签: symfony doctrine-orm

我仍在考虑在Symfony中使用标记的最佳方法。我确实看过FPNTagBundle,但我没有找到一种简单的方法将其用于CRUD表单。

我还发现http://xoxco.com/clickable/jquery-tags-input可以提供完美的小部件。因为它输入和输出逗号分隔的字符串,我想我可以在我的模型中定义一个虚拟字段,它将标记对象数组显示为这样一个列表。

public function addTag(\Wein\StoreBundle\Entity\Tag $tag)
{
    $this->tag[] = $tag;
    $this->makeTagFieldFromTags();
}

public function setTagField($tagField)
{
    $this->tagField = $tagField;
    $this->makeTagsFromTagField();
}
public function makeTagsFromTagField()
{
    $tags=explode(',', $this->tagField);
    $tagObjects=array();

    $em = $this->getDoctrine()->getEntityManager();

    foreach($tags as $tag) {
        $tag=trim($tag);
        $tagObject = **???**;
        $tagObjects[]=$tagObject;
    }
    $this->tag=$tagObjects;
}

public function makeTagFieldFromTags()
{
    $tags=array();
    foreach($this->tag as $tag) {
        $tags[]=$tag->__toString();
    }

    $this->tagField = implode(',', $tags);
}

我可以在这个字段上使用表单元素。不幸的是,我没有看到将字符串转换为标签对象的方法,因为我无法访问实体管理器。

那么干净的方式是什么?

1 个答案:

答案 0 :(得分:1)

干净的方法是使用data transformer。它将字符串转换为“表单”侧的标记实体,而不是实体,因此您可以保持实体的清洁。