2013-05-31 33 views
0

大家早上好!是一种形式。symfony2中的复选框字段

类ReleasesType:

$builder 
    ->add('doid', 'text') 
    ->add('dourl', 'text') 
    ->add('artists', 'entity', array(
     'class' => 'MReleaseCoreBundle:Artists', 
     'property' => 'name', 
     'expanded' => true , 
     'multiple' => true     
    )); 

Сonnection与他们一到多:

级 '艺术家':

/** 
* @ORM\OneToMany(targetEntity="ReleasesArtists" , mappedBy="artists" , cascade={"all"}) 
* */ 
private $da; 

public function __construct() { 
    $this->da = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

班 'ReleasesArtists':

/** 
* @ORM\ManyToOne(targetEntity="Releases", inversedBy="da") 
* @ORM\JoinColumn(name="releases_id", referencedColumnName="id") 
* */ 
private $releases; 

/** 
* @ORM\ManyToOne(targetEntity="Artists", inversedBy="da") 
* @ORM\JoinColumn(name="artists_id", referencedColumnName="id") 
* */ 
private $artists; 

当然实体“发布”:

/** 
* @ORM\OneToMany(targetEntity="ReleasesArtists" , mappedBy="releases", cascade={"all"} , orphanRemoval=true) 
*/ 
private $da; 

public function getArtists() { 

    $artists = new ArrayCollection(); 

    foreach($this->da as $p) { 
     $artists[] = $p->getArtists()->getName(); 
    } 

    return $artists; 

}  

public function addDa($da) { 
    $this->da[] = $da; 
} 

public function setArtists($artists) { 

    foreach($artists as $p) { 
     $po = new \MRelease\CoreBundle\Entity\ReleasesArtists(); 

     $po->setReleases($this); 
     $po->setArtists($p); 

     $this->addDa($po); 
    } 

} 

连接正常工作,所有输出。但不“检查”。可能是什么问题? 谢谢!

回答

0

到控制器中,在那里你建立和输出表单,你必须做这样的事情

public function myFooAction(Request $request, $releasesId) 
{ 
    $repo = $this->getDoctrine()->getManager()->getRepository('YourBundleName:Releases'); 
    $releasesObject = $repo->findOneById($releasesId); 
    $form = $this->createForm(new ReleasesType(), $releasesObject); 
    return $this->render('YourBundle::TemplateToRender, array('form'=>$form); 
} 



这里发生什么事,为什么在工作?

我做了一些假设,你不提供任何控制器代码。首先,我假设你有一个像myFooAction()这样的操作,在那里你可以进行操作,我想,还有,你将这个操作传递给一个id用于从DB加载对象,并将它绑定到你的表单 - 如果我正确理解你的问题。
因此,第一行是用于检索此对象的存储库。一旦你有回购,你可以获取你的对象(第二行)。在第三行中,我使用Symfony2表单的工具和“连接”对象到他的表单类型:通过这个,包含在这个对象中的所有值都会被报告到你的表单中(所以复选框将具有正确的值)。最后一行是渲染表单。

显然,你的行动逻辑可能是不同的,但在这里表达的理念可以用“不同”实施到处复制。

+0

我的方法:

 $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('MReleaseCoreBundle:Releases')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Releases entity.'); } $editForm = $this->createForm(new ReleasesType(), $entity); return $this->render('MReleaseCoreBundle:Releases:edit.html.twig', array( 'entity' => $entity, 'edit_form' => $editForm->createView() )); 
Konstantin

+0

@Konstantin:等等?我听不懂你在说什么。工作中?不工作?有什么问题?请帮我理解:P – DonCallisto

+0

英文不好:) 找出问题所在。 Getter不需要显示标题是: $ artists [] = $ p-> getArtists() - > getName(); 取代 $艺术家[] = $ p-> getArtists(); – Konstantin

相关问题