0

おはようございます!の形です。

クラス リリース タイプ:

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

それらとの1対多の接続:

クラス「アーティスト」:

/**
 * @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()フォーム操作を行う場所のようなアクションがあると仮定します。また、このアクションにidDB からの for load オブジェクトを渡し、それをフォームに結び付けると仮定します-私があなたの質問を正しく理解していれば。
したがって、アクションの最初の行は、このオブジェクトのリポジトリを取得することです。リポジトリを取得したら、オブジェクトを取得できます (2 行目)。3 行目では、Symfony2 フォームの機能を使用し、オブジェクトをそのフォーム タイプに「接続」します。これにより、このオブジェクトに含まれるすべての値がフォームにレポートされます (したがって、チェックボックスは正しい値になります)。最後の行はレンダリング フォームです。

明らかに、アクションロジックは異なる可能性がありますが、ここで表現されている概念は、どこでも「異なる」実装で複製される可能性があります.

于 2013-05-31T07:05:02.593 に答える