2016-04-06 23 views
0

2 Varlığım var: Kampanyalar & Materialstreams. ManyToMany ilişkisinde birbirleriyle bağlantılılar.Hata: Seçim alanına iletilen varlıklar çok adımlı bir biçimde yönetilmelidir

Campaignstream

class campaignstream 
{ 
/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

/** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=80) 
    */ 
    private $name; 

/** 
    * @ORM\ManyToMany(targetEntity="materialstream", inversedBy="campaignstreams") 
    * @ORM\JoinTable(name="campaignstream_materialstream") 
    * 
    */ 
    private $materialstreams; 
} 

Materialstream

class materialstream 
{ 
/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

/** 
    * @var string 
    * 
    * @ORM\Column(name="description", type="string", length=80) 
    */ 
    private $description; 

/** 
    * @ORM\ManyToMany(targetEntity="campaignstream", mappedBy="materialstreams") 
    * 
    */ 
    private $campaignstreams; 

} 

Şimdi ona bağlı birden materialstreams ile campaignstream oluşturmak için çok adımlı bir form oluşturmak istiyorum. Benim denetleyicisi olarak

böyle bir şey var:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('materialstreams', 'entity', array(
     'class' => 'CampaignBundle:materialstream', 
     'property' => 'description', 
     'multiple' => true, 
     'expanded' => false, 
    )); 
} 

Şimdi sorun şu: Ben 2. adımda kullanmak formda, Şimdi

public function addAction(Request $request, $step) 
{ 
    $session = $request->getSession(); 
    $em = $this->getDoctrine()->getManager(); 

    if ($step == 1) { 
    $campaignstream = ($session->get('campaignstreamdata') == '') ? new campaignstream() : $session->get('campaignstreamdata'); 
    $CSF = $this->createForm(new CampaignstreamForm(), $campaignstream); 
    $CSF->handleRequest($request); 
    if ($CSF->isSubmitted() && $CSF->isValid()) { 
     $session->set('campaignstreamdata', $CSF->getData()); 
     return $this->redirectToRoute('campaignstream_add', array('step' => 2)); 
    } else { 
     return $this->render('CampaignBundle:Stream:add.html.php', array(
     'current' => $id, 
     'data' => $CSF->createView() 
    )); 
    } 
    } elseif ($step == 2) { 
    $campaignstream = $session->get('campaignstreamdata'); 
    $CSMSF = $this->createForm(new CampaignstreamMaterialstreamForm(), $campaignstream); 
    if ($CSMSF->isSubmitted()) { 
     $session->set('campaignstreamdata', $CSMSF->getData()); 
     return $this->redirectToRoute('campaignstream_add', array('step' => 3)); 
    } else { 
     return $this->render('CampaignBundle:Stream:add.html.php', array(
     'progress' => $progress, 
     'current' => $id, 
     'data' => $CSMSF->createView(), 
     'title' => $title, 
     'campaignstream' => $campaignstream 
    )); 
    } 
    } elseif ($step == 3) { 
    ... 
    } 
} 

, bu var:
Adım 1'den geçiyorum ve adı doldurun. 2. adımdan geçiyorum ve doğru malzeme akışlarını seçiyorum. 3. adıma geldim ve 1 malzeme akışını unuttum. seçim alanına geçti Varlıkları bunu google'dan

yönetilmelidir ve benzeri çeşitli çözümler çalıştı: Ben hatayı almaya 2. adıma geri dönmek için linke tıklayın

Hata gider, ancak formum önceden eklenen verilerle doldurulmadı, ancak veriler oturumda var.

Gerçekten biraz yardım edebilirim.

cevap

0

Vay, pek çok farklı şey denedikten sonra sonunda düzelttim! Her ayrı materialstream üzerinde

ben birleştirme yapmak zorunda:

} elseif ($id == 2){ 
    $campaignstream = $session->get('campaignstreamdata'); 

    $materials = $campaignstream->getMaterialstreams(); 

    foreach($materials as $material) 
    { 
    $campaignstream->removeMaterialstream($material); 
    $campaignstream->addMaterialstream($em->merge($material)); 
    } 
    ... 
} 
İlgili konular