2016-04-16 3 views
0

Ich habe eine Viele-zu-Eins-Beziehung eingerichtet und möchte ein neues Produkt-Objekt hinzufügen, das mit seiner Kategorie verknüpft ist. In Verbindung damit habe ich 2 Fragen:Symfony neues Objekt erstellen viele zu einem Fehleraufruf undefined Methode

Ich bleibe beim Speichern der Kategorie Objekt auf das neue Produkt stecken. Versuchte verschiedene Optionen und lese verwandte Fragen hier. In diesem Moment erhalte ich den Fehler: Versuch, eine undefinierte Methode namens "getCategory" der Klasse "AppBundle \ Controller \ ProductController" aufzurufen. Ich habe die Methode getCategory in meiner Produktklasse. Was fehlt mir hier?

Eine andere Sache, die ich gerne wissen würde ist, muss ich die Kategorie-ID in der URL übergeben, um die zugehörigen Produkte für diese Kategorie zu bekommen?

Ich habe eine Kategorie Klasse:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
/** 
* @ORM\Entity 
* @ORM\Table(name="category") 
*/ 
class Category 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */ 
    private $cat_id; 
... 
/** 
* @ORM\OneToMany(targetEntity="Product", mappedBy="category") 
*/ 
private $products; ... 
public function __construct() 
{ 
    $this->products = new ArrayCollection(); 
} 

und Produktklasse:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Category; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */ 
    private $prd_id; 

    /** 
    * @var Category 
    * 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="products") 
    * @ORM\JoinColumn(name="cat_id", referencedColumnName="cat_id", nullable=false) 
    */ 
    private $category; 

    .... 

    /** 
    * Set category 
    * 
    * @param \AppBundle\Entity\Category $category 
    * 
    * @return Product 
    */ 
    public function setCategory(\AppBundle\Entity\Category $category) 
    { 
     $this->category = $category; 

     return $this; 
    } 

    /** 
    * Get category 
    * 
    * @return \AppBundle\Entity\Category 
    */ 
    public function getCategory() 
    { 
     return $this->category; 
    } 

Aus meiner Liste der Kategorien "/ categories" Ich verbinde die Kategorien zur Produkt "/ cat1/Produkt" (< - muss ich die Kategorie-ID hier übergeben?). Dort möchte ich ein neues Produkt hinzufügen und die folgende Aktion in meinem ProductController aufrufen:

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Response; 
use AppBundle\Entity\Product; 
use AppBundle\Form\ProductType; 
use Symfony\Component\HttpFoundation\Request; 

class ProductController extends Controller 
{ 
    /** 
    * @Route("/cat{cat_id}/product/new", name="newproduct") 
    */ 
    public function newAction(Request $request, $cat_id) 
    { 
     $product = new Product(); 
     $form = $this->createForm(ProductType::class, $product); 

     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $category = $this->getCategory(); 
      $product->setCategory($category); 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($product); 
      $em->flush(); 

      return $this->redirectToRoute('productlist'); 
     } 

     return $this->render('product/new.html.twig', array(
      'form' => $form->createView(), 
      'cat_id' => $cat_id, 
      )); 
    } 

Anregungen geschätzt!

Antwort

1

wenn Sie das tun:

$category = $this->getCategory(); 

$ dies Ihr Product darstellen, ist es der Grund, der nicht definierte Methode Fehler ist. Um das Kategorie-Objekt zu erhalten, müssen Sie Folgendes tun:

 $categoryRepository = $this->getDoctrine()->getRepository('AppBundle:Category'); 
    $product->setCategory($categoryRepository->find($cat_id)); 

hoffe, dass Ihnen helfen kann.

+0

In der Tat hilft das. Ich habe irgendwie erwartet, dass der Getter "Get category" in der Produkteinheit dies für mich tun würde, wegen der Viele-zu-Eins-Verbindung. Aber wie ich jetzt verstehe, ist das nicht der Fall. Eine andere Sache, die ich gerne wissen würde ist, muss ich die Kategorie-ID in der URL übergeben, um die zugehörigen Produkte für diese Kategorie zu bekommen? – zef

+0

Sie können eine ausgewählte hydratisiert von all Ihren Kategorien in der Produktform hinzufügen. Du kannst den guten Weg hier sehen [link] (http://symfony.com/doc/current/reference/forms/types/entity.html) –

+0

Da ich bereits eine Kategorie ausgewählt habe, bevor ich ein neues Produkt hinzufüge, möchte ich nicht auswählen eine Kategorie wieder. Ich bin auf der Suche nach einer (einfachen) Möglichkeit, die Kategorie-ID vom Kategoriecontroller an den Produktcontroller zu übergeben, ohne sie durch die URL zu leiten. – zef

Verwandte Themen