2017-02-24 3 views
1

Ich benutze symfony, um die Funktionen wie folgt zu erstellen: Ich habe Product and ShippingWays. Ein Produkt könnte mehr ShippingWays und One ShippingWay nur ein Produkt haben.symfony OneToMany Formular

ProductEntity:

/** 
* @ORM\OneToMany(targetEntity="ShippingWay",mappedBy="product") 
*/ 
private $shippingWays; 

shippingway Entity:

/** 
* @ORM\ManyToOne(targetEntity="Product", inversedBy="shippingWays") 
* @ORM\JoinColumn(name="product_id", referencedColumnName="id") 
**/ 
private $product; 

Dann baue ich sowohl die Product und ShippingWayType.

Product

->add('shippingWays', EntityType::class, array(
      'label'    => ' Shipping Ways', 
      'translation_domain' => 'forms', 
      'class'    => 'CoreBundle:ShippingWay', 
      'choice_label'  => 'name', 
      'multiple'   => true, 
      'required'   => false, 
     )) 

Product

/** 
* @Route("/admin/product/new", name="admin_product_new") 
* @Template() 
*/ 
public function newAction(Request $request) 
{ 
    $product = new Product(); 
    $shippingWay= new ShippingWay(); 
    $form = $this->createForm(ProductType::class, $product); 
    $shippingForm = $this->createForm(ShippingWayType::class, $shippingWay); 

    if ($request->isMethod('POST')) { 
     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($product); 
      $em->flush(); 
      return $this->redirect($this->generateUrl('admin_product')); 
     } 
    } 
    return(array('form' => $form->createView(),'users'=>$users,'shippingForm '=>$shippingForm ->createView())); 
} 
  • Ich mag würde, um den Versand Weg in der Produktseite hinzufügen/bearbeiten.
  • Wenn es keine geeigneten Versandwege gibt, muss ich eine neue auf der Produktseite erstellen. Etwas wie folgt aus:

enter image description here

Derzeit Ich habe 2 Probleme:

  • Wie die Liefer-Weg mit Formular wie gewohnt in Produktseite verwalten? Gibt es eine allgemeine Möglichkeit, die Formulare unter OneToMany & ManyToOne Beziehungen zu behandeln?
  • Ich wähle Versandweg A, wenn ich Produkt X hinzufüge, dann könnte ich Versandweg A wie vorher wählen, wenn ich Produkt Y addiere. Ich fand das procuct_id mit Verschiffen Weise A immer Null.

Könnte mir jemand einige Vorschläge und Referenzen geben? Vielen Dank.

+0

'dann habe ich zu einem neuen auf der Produktseite. - Was müssen Sie tun? Was meinst du mit "verwalten"? Es ist ziemlich breites Wort. Ein Code, der zeigt, was du versuchst zu tun, wäre hilfreich, deine Frage zu verstehen. –

+0

Vielen Dank Jakub. Ich habe die Fragen aktualisiert, hoffe, dass sie mehr machen Sinn jetzt – Bob

Antwort

1

Für Ihr erstes Problem: In Ihrem ProductType sollten Sie nicht EntityType für ShippingWay verwenden, da es nur die Liste der vorhandenen Einträge anzeigen, die ShippingWay-Entitäten betreffen.

Wenn Sie bearbeiten/hinzufügen möchten, wäre es besser, Collection zu verwenden, wie hier angegeben: How to Embed a Collection on a Symfony Form

In Ihrem Fall Ihre Product wäre:

->add('shippingWays', CollectionType::class, array(
     'label'    => ' Shipping Ways', 
     'translation_domain' => 'forms', 
     'entry_type   => 'CoreBundle:ShippingWay', 
     'choice_label'  => 'name', 
     'allow_add'   => true, 
     'allow_delete'  => true 
    )) 
+0

Vielen Dank.Das hilft mir wirklich sehr Vielen Dank nochmals und wünsche Ihnen einen schönen Tag. – Bob

Verwandte Themen