0

大家,早安!是一种形式。

类 ReleasesType:

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

与他们一对多连接:

“艺术家”类:

/**
 * @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);
    }

}

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

4

1 回答 1

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()你在哪里进行表单操作,我还想你将一个idfor load 对象从 DB 传递给这个动作,并将其绑定到你的表单 - 如果我正确理解你的问题的话。
因此,第一行是检索该对象的存储库。一旦你有了 repo,你就可以获取你的对象(第二行)。在第三行,我使用 Symfony2 表单的工具并将对象“连接”到他的表单类型:这样,包含在该对象中的所有值都将报告到您的表单中(因此复选框将具有正确的值)。最后一行用于渲染表单。

显然,您的操作逻辑可能会有所不同,但此处表达的概念可以通过“不同”的实现到处复制。

于 2013-05-31T07:05:02.593 回答