2013-05-31 57 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

相關問題