2013-06-22 4 views
2

Я использую FPNTagBundle, и я хотел бы иметь текстовое поле для добавления тегов к объектам, которые работают так же, как и на этом сайте.Symfony2 - Заполнить текстовое поле ArrayCollection?

Я могу создать новый объект с тегами без проблем с помощью взрыва, но когда я приступлю к редактированию объекта снова, я получаю что-то подобное в текстовом поле.

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())); 
} 

Любые советы оценили.

Благодаря

ответ

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

На самом деле ваш пост является удивительным дополнением к документу. Поскольку 'Теги' обычно являются ArrayCollection, я застрял в ошибке implode. Спасибо, сэр ! –