Forms formbuilder中实体小部件的默认值

Forms formbuilder中实体小部件的默认值,forms,symfony,widget,entity,default-value,Forms,Symfony,Widget,Entity,Default Value,我已经看过很多关于如何在Symfony2中设置表单默认数据的主题,但是我没有找到任何关于如何在带有查询生成器的实体小部件中设置默认数据的主题。我解释我的问题: 我有两个实体,沟通和地位,有着千丝万缕的联系。 这是我的沟通课: class Communication{ /** * @ORM\Id * @ORM\Column(name="Comm_CommunicationId") * @ORM\Column(type="integer") * @ORM\GeneratedValue(st

我已经看过很多关于如何在Symfony2中设置表单默认数据的主题,但是我没有找到任何关于如何在带有查询生成器的实体小部件中设置默认数据的主题。我解释我的问题:

我有两个实体,沟通和地位,有着千丝万缕的联系。 这是我的沟通课:

class Communication{

/**
 * @ORM\Id
 * @ORM\Column(name="Comm_CommunicationId")
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
protected $id;

    /**
 * @ORM\ManyToOne(targetEntity="Test\DatabaseBundle\Entity\Statut", inversedBy="communication")
 * @ORM\JoinColumn(name="Comm_Status", referencedColumnName="Capt_Code")
 */
private $statut;}
这是我的状态类:

class Statut{

/**
 * @ORM\Id
 * @ORM\Column(name="Capt_CaptionId")
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
protected $id;
/**
 * @ORM\Column(name="Capt_Code", type="string")
 */
private $code;

/**
 * @ORM\Column(name="Capt_FR", type="string")
 */
private $codefr;}
我构建了一个CommunicationType表单,允许我修改通信实体:

 public function buildForm(FormBuilder $builder, array $options)
{
    $builder      -> add('caseid','text')
                  -> add('statut','entity', array('class' => 'Test\DatabaseBundle\Entity\Statut',
                                                  'query_builder' => function(\Test\DatabaseBundle\Entity\StatutRepository $sr){
                                                        $res = $sr->getCodeOnly();                                                          
                                                        return $res; },
                                                  'property' => 'CodeFr',
                                                  'preferred_choices' => array(1),
                                                  ));}
这是我的控制器:

public function ModifierAction($commid){
    $comm = $this -> getDoctrine()
                  -> getEntityManager()
                  -> getRepository('Test\DatabaseBundle\Entity\Communication')
                  -> find($commid);
    $form = $this -> createForm(new CommunicationType($em), $comm);
    ....
}
我给你我的实体的setter和getter: 通讯:

/**
 * Set id
 *
 * @param integer $Id
 */
public function setId($Id)
{
    $this -> id = $Id;
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
} 
身份实体:

/**
 * Set id
 *
 * @param integer $id
 */
public function setId($id)
{
    $this->id = $id;
}

/**
 * Get id
 *
 * @return integer
 */
public function getId()
{
    return $this->id;
}       /**
 * Set code
 *
 * @param string $code
 */
public function setCode($code)
{
    $this->code = $code;
}

/**
 * Get code
 *
 * @return string
 */
public function getCode()
{
    return $this->code;
}       /**
 * Add communication
 *
 * @param Acme\StoreBundle\Entity\Communication $communication
 */
public function addCommunication(\Test\DatabaseBundle\Entity\Communication $communication)
{
    $this->communication[] = $communication;
}

/**
 * Get communication
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getCommunication()
{
    return $this->ccommunication;
}       public function __construct()
{
    $this->communication = new ArrayCollection();
}
你说条令会自动检查物体。通常,您是否执行查询并在数据库中搜索对象的当前值,并将其作为默认选项传递

有了这个,我可以修改我的实体,但我不知道如何将我当前的实体状态值作为小部件“实体”的默认值。“getCodeOnly”方法在数据库中搜索状态代码(完成、取消、正在进行、删除)的值,并始终将Complete作为默认值传递。例如,如果一个实体作为取消的值,我想在使用此表单修改实体时将取消作为默认值

我无法使用getData和preferred_choice访问状态值,因为preferred_choice需要数组作为参数,而不是实体

我还尝试用不同的status值构建一个数组,并将其传递给我的表单,但由于我的数据库存在一些问题,它失败了


如果任何人有任何信息可以解决这个问题,我很乐意看到。

在您的控制器中,您能获得正确的实体通信状态代码吗?(var_dump($comm->getStatut());exit;)是的,我可以。问题是,如果我放置一个文本小部件而不是实体小部件,那么默认值就是数据库中的值。但是使用实体小部件,我的查询结果将覆盖正确的值。我想把这个值放在数据库中,作为我选择的“第一个”值。这只是另一个问题,您是在项目中使用不同的EntityManager(一个用于读取数据库,另一个用于写入数据库,等等),还是默认情况下只使用一个?我有一个bug,它是由主/从em引起的。我使用同一个EntityManager进行读写。对于那些能读法语的人,我发现了这个,我正在尝试这个解决方案,我会让你知道它是否对我有效。^^:不是正确的解决方案。使用“实体”字段是一个不错的选择。您是否创建了$communication;你的身份实体中的var?