2016-10-07 3 views
0

Ich habe das folgende Feldeingestellten Daten an Einheit Feld mit query_builder und mehrere wahre

 ->add('specialProduct' , 'entity', array(
      'class' => 'BSSmartDistributionBundle:Product', 
      'expanded' => true, 
      'multiple' => true, 
      'required' => true, 
      'label' => false, 
      'mapped' => false, 
      'query_builder' => function(ProductRepository $er) { 
       return $er->createQueryBuilder('p') 
        ->where('p.active = :active') 
        ->andWhere('p.type = :type') 
        ->setParameter('type', 1) 
        ->setParameter('active', 1); 
      }, 
      'data' => $this->specialProduct # not working 
     )) 

ich die Daten erhalten und speichern sie in der Sitzung

$specialProduct = $form->get('specialProduct')->getData(); 
$request->getSession()->set('specialProduct', $specialProduct); 

Daten:

Doctrine\Common\Collections\ArrayCollection Object 
(
[elements:Doctrine\Common\Collections\ArrayCollection:private] => Array 
    (
     [0] => BS\SmartDistributionBundle\Entity\Product Object 
      (
       [id:BS\SmartDistributionBundle\Entity\Product:private] => 6 
       [type:BS\SmartDistributionBundle\Entity\Product:private] => 1 
       [name:BS\SmartDistributionBundle\Entity\Product:private] => Starter Pack 
       [duration:BS\SmartDistributionBundle\Entity\Product:private] => 1 
       [description:BS\SmartDistributionBundle\Entity\Product:private] => Tout de suite 
       [full_description:BS\SmartDistributionBundle\Entity\Product:private] => blabla 
       [price:BS\SmartDistributionBundle\Entity\Product:private] => 39 
       [picture:BS\SmartDistributionBundle\Entity\Product:private] => /tmp/php6h3rXK 
       [active:BS\SmartDistributionBundle\Entity\Product:private] => 1 
      ) 

     [1] => BS\SmartDistributionBundle\Entity\Product Object 
      (
       [id:BS\SmartDistributionBundle\Entity\Product:private] => 15 
       [type:BS\SmartDistributionBundle\Entity\Product:private] => 1 
       [name:BS\SmartDistributionBundle\Entity\Product:private] => asdsd 
       [duration:BS\SmartDistributionBundle\Entity\Product:private] => 2 
       [description:BS\SmartDistributionBundle\Entity\Product:private] => asdasd 
       [full_description:BS\SmartDistributionBundle\Entity\Product:private] => adsd 
       [price:BS\SmartDistributionBundle\Entity\Product:private] => 12 
       [picture:BS\SmartDistributionBundle\Entity\Product:private] => uploads/product/d978b90215d06fbf569203e7cf2d5aef.png 
       [active:BS\SmartDistributionBundle\Entity\Product:private] => 1 
      ) 

    ) 

) 

jetzt würde ich gerne die entsprechenden Checkboxen prüfen!

gleiche Feld mit mehreren falschen ich den Wert mit

'data' => $this->value 

einstellen habe ich versucht,

'data' => $this->specialProduct # not working (contains $specialProduct above) 

Wie kann ich diese Werte? Muss ich ein Array übergeben?

Danke!

Antwort

0

ich es auf diese Weise ended tun in das Formular mit Entity Manager

$this->specialProductIds = $options['specialProductIds']; 
$this->em     = $options['em']; 

in Form

public function availablespcialProduct($ids) { 

    if ($this->em) { 
     return $this->em 
     ->getRepository('BS\SmartDistributionBundle\Entity\Product') 
     ->findById(
      $ids 
     ); 
    } 
} 

und schließlich

'data'  => $this->availablespcialProduct($this->specialProductIds) 

noch für eine sauberere Lösung warten!

Danke!

0

Das Festlegen der Standardwerte für ein Formular erfolgt immer für eine Instanz von FormInterface unter Verwendung von setData und nicht als data im Options-Array für jedes Formularfeld. :

Die Standardwerte für Formularfelder werden direkt aus der zugrunde liegenden Datenstruktur (z. B. eine Entität oder ein Array) übernommen. Die Datenoption überschreibt diesen Standardwert.

Wenn Sie verwendet data Option als die Form wird immer vorgewählt, was in data ist und nicht von der Einheit.

Also, wenn ich Ihren Code richtig verstehen würde es sein:

$form->setData([ 
    specialProduct => $request->getSession()->get('specialProduct') 
]); 

Da die gespeicherten Daten in der Sitzung eine Sammlung von Product s ist. Ich verwende ein Array mit nur die IDs

foreach ($specialProduct as $product) { 
    $specialProductIds[] = $product->getId(); 
} 

$request->getSession()->set('specialProductIds', $specialProductIds); 

Pass

I wurde die Speicherung und Weitergabe an die Form eine Arraycollection

controller : 
$specialProduct = $form->get('specialProduct')->getData(); 
$request->getSession()->set('specialProduct', $specialProduct); 

form : 
$this->specialProduct = $options['specialProduct']; 

'data' => $this->specialProduct 

anstatt es:

+0

so entfernte ich die Daten in das Formular, hinzugefügt setData in der Steuerung, Checkboxen sind nicht überprüft. Danke trotzdem :) – frian

+0

Sie müssen Ihren Code zeigen oder es ist unmöglich, Ihnen zu helfen. – martin

+0

es ist ein 1200-Zeilen-Controller :((Ja, ich weiß)! Lassen Sie mich versuchen, mit SetData zu spielen. Danke! – frian

Verwandte Themen