2014-07-28 2 views
1

Я создал форму, основанную на поле объекта. Эта форма состоит из флажков, которые позволяют пользователю выбирать объект (здесь «автомобиль»). Это прекрасно работает, но мне нужно настроить рендеринг, чтобы получить дополнительную информацию. В настоящее время единственной отображаемой информацией является атрибут «id». В моем случае я хотел бы отобразить дополнительную информацию о лицах в форме, такой как цвет, бренд и т. Д. Кто-нибудь знает, как действовать?Как настроить рендеринг формы, когда на основе поля объекта в symfony 2?

Контроллер:

 public function chooserAction() { 
     //symfony.com/doc/current/reference/forms/types/entity.html 
     $cars = $this->getDoctrine() 
       ->getRepository('CarBundle:Car') 
       ->find(1); 
     $formBuilder = $this->createFormBuilder(); 
     /* 
      foreach ($cars as $car) { 
      $formBuilder->add($car->getId() ,'checkbox')->getForm(); 
      } 
     */ 
     $formBuilder->add('cars', 'entity', array(
      'class' => 'CarBundle:Car', 
      'property' => 'id', 
      'expanded' => 'true', 
      'multiple' => 'true', 
     )); 

     $formBuilder->add('save', 'submit'); 
     $form = $formBuilder->getForm(); 
     $request = $this->get('request'); 
     $form->handleRequest($request); 
     if ($form->isValid()) { 
      echo "ok"; 

//   return $this->redirect($this->generateUrl('car_show', array('id' => $car->getId()))); 
     } 

     return $this->render('CarBundle:Car:chooser.html.twig', array('form' => $form->createView())); 
    } 

Субъект:

<?php 

namespace Foobar\CarBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Car 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Foobar\CarBundle\Entity\CarRepository") 
*/ 
class Car 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="brand", type="string", length=255) 
    */ 
    private $brand; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="color", type="string", length=255) 
    */ 
    private $color; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="power", type="integer") 
    */ 
    private $power; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return Car 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set brand 
    * 
    * @param string $brand 
    * @return Car 
    */ 
    public function setBrand($brand) 
    { 
     $this->brand = $brand; 

     return $this; 
    } 

    /** 
    * Get brand 
    * 
    * @return string 
    */ 
    public function getBrand() 
    { 
     return $this->brand; 
    } 

    /** 
    * Set color 
    * 
    * @param string $color 
    * @return Car 
    */ 
    public function setColor($color) 
    { 
     $this->color = $color; 

     return $this; 
    } 

    /** 
    * Get color 
    * 
    * @return string 
    */ 
    public function getColor() 
    { 
     return $this->color; 
    } 

    /** 
    * Set power 
    * 
    * @param integer $power 
    * @return Car 
    */ 
    public function setPower($power) 
    { 
     $this->power = $power; 

     return $this; 
    } 

    /** 
    * Get power 
    * 
    * @return integer 
    */ 
    public function getPower() 
    { 
     return $this->power; 
    } 
} 

Вид:

car chooser 
{{ form(form) }} 

ответ

1

Вы можете создать метод ToString() в вашем автомобиле лица.

public function __toString() 
{ 
    return '' . $this->getName(); 
} 

Если вы хотите больше думает, как фотографии вы могли бы следовать, что http://symfony.com/doc/current/cookbook/form/form_customization.html

+0

Спасибо, я thinked о, но это не будет достаточно, если вам нужно, чтобы отобразить изображение. –

+0

Обновление с помощью http://symfony.com/doc/current/cookbook/form/form_customization.html –