2013-06-22 60 views
2

我正在使用FPNTagBundle,我希望有一個文本字段將標記添加到以與本網站相同的方式工作的實體。Symfony2 - 使用ArrayCollection填充文本字段?

我可以用標籤創建一個沒有問題的新實體,但是當我再次編輯實體時,我在文本字段中得到了類似的內容。

主義\ COMMON \收藏\ 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())); 
} 

讚賞任何意見。

謝謝

回答

5

這就是數據轉換器的作用。

How to use Data Transformers

一個簡單的例子:

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; 
} 
+1

其實你的文章是一個真棒補充的文檔。由於'Tags'通常是一個ArrayCollection,所以我被implode錯誤困住了。謝謝先生 ! –