3

我正在使用 FPNTagBundle,我希望有一个文本字段来为实体添加标签,这些标签的工作方式与本网站上的相同。

我可以通过使用explode创建一个带有标签的新实体,但是当我再次编辑实体时,我在文本字段中得到类似的东西。

Doctrine\Common\Collections\ArrayCollection@0000000062a07bb50000000047044868

有没有办法可以使用数组集合预先填充文本字段,以便所有标签都出现,用空格分隔?

这是我目前在控制器中的内容:

public function editpageAction(Request $request, $id = NULL)
{
    $em = $this->getDoctrine()->getEntityManager();
    $tagManager = $this->get('fpn_tag.tag_manager');
    $page = new Page();

    if ( ! empty($id))
    {
        $page = $em->getRepository('ContentBundle:Page')->findOneById($id);
        $tagManager->loadTagging($page);
    }

    $form = $this->createForm(new PageType(), $page);

    if ($request->isMethod('POST')) 
    {
        $form->bind($request);

        if ($form->isValid()) 
        {   
            $em = $this->getDoctrine()->getManager();
            $em->persist($page);
            $em->flush();

            return $this->redirect($this->generateUrl('content_admin_list_sections'));
        }
    }

    return $this->render('ContentBundle:Admin:page.html.twig', array('form' => $form->createView()));
}

任何建议表示赞赏。

谢谢

4

1 回答 1

7

这就是数据变压器的用途。

如何使用数据转换器

一个简单的例子:

public function transform($tags)
{
    $tags = $tags->toArray();

    if (count($tags) < 1)
        return '';
    else
        return implode(' ', $tags);
}

public function reverseTransform($string)
{
    $tags = new ArrayCollection();
    $tagsArray = explode(' ', $string);

    if (count($tagsArray) > 0)
        $tags = new ArrayCollection($tagsArray);

    return $tags;
}
于 2013-06-22T16:58:00.173 回答